Adding sockaddr-port.

This commit is contained in:
Alex Shinn 2013-07-14 18:40:23 +09:00
parent a3102c4c1e
commit 924352921a
4 changed files with 16 additions and 2 deletions

View file

@ -11,7 +11,9 @@
((not (or (eof-object? line) (equal? line "")))
;; log the request to stdout
(display "read: ") (write line)
(display " from ") (display (sockaddr-name (address-info-address addr)))
(display " from ")
(display (sockaddr-name (address-info-address addr)))
(display ":") (write (sockaddr-port (address-info-address addr)))
(newline)
;; write and flush the response
(display line out)

View file

@ -40,6 +40,8 @@ sexp sexp_listen (sexp ctx, sexp self, sexp fileno, sexp backlog) {
return (res == 0) ? SEXP_TRUE : SEXP_FALSE;
}
/* Additional utilities. */
sexp sexp_sockaddr_name (sexp ctx, sexp self, struct sockaddr* addr) {
char buf[20];
struct sockaddr_in *sa = (struct sockaddr_in *)addr;
@ -47,3 +49,8 @@ sexp sexp_sockaddr_name (sexp ctx, sexp self, struct sockaddr* addr) {
sprintf(buf, "%d.%d.%d.%d", ptr[0], ptr[1], ptr[2], ptr[3]);
return sexp_c_string(ctx, buf, -1);
}
int sexp_sockaddr_port (sexp ctx, sexp self, struct sockaddr* addr) {
struct sockaddr_in *sa = (struct sockaddr_in *)addr;
return sa->sin_port;
}

View file

@ -2,7 +2,7 @@
(define-library (chibi net)
(export sockaddr? address-info? get-address-info make-address-info
socket connect bind accept listen open-socket-pair
sockaddr-name
sockaddr-name sockaddr-port
with-net-io open-net-io make-listener-socket
address-info-family address-info-socket-type address-info-protocol
address-info-address address-info-address-length address-info-next

View file

@ -61,6 +61,11 @@
(define-c sexp (sockaddr-name "sexp_sockaddr_name")
((value ctx sexp) (value self sexp) sockaddr))
;;> Return the port a sockaddr is connected on.
(define-c int (sockaddr-port "sexp_sockaddr_port")
((value ctx sexp) (value self sexp) sockaddr))
(define-c-const int (address-family/unspecified "AF_UNSPEC"))
(define-c-const int (address-family/unix "AF_UNIX"))
(define-c-const int (address-family/inet "AF_INET"))