codepad
[
create a new paste
]
login
|
about
Language:
C
C++
D
Haskell
Lua
OCaml
PHP
Perl
Plain Text
Python
Ruby
Scheme
Tcl
#include <sys/socket.h> #include <err.h> #include <stdio.h> #include <unistd.h> #include <netinet/in.h> int do_bind(int sock, uint16_t port) { struct sockaddr_in addr; addr.sin_family = AF_INET; addr.sin_port = htons(port); addr.sin_addr.s_addr = INADDR_ANY; return bind(sock, (struct sockaddr *) &addr, sizeof addr); } int get_bound_port(int sock) { union { struct sockaddr_storage ss; struct sockaddr_in sin; } addr; socklen_t addrlen = sizeof addr; if (getsockname(sock, (struct sockaddr *) &addr, &addrlen) == -1) return -1; if (addr.ss.ss_family == AF_INET) return ntohs(addr.sin.sin_port); return -1; } int main() { int sock; int port; sock = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP); if (sock == -1) err(1, "Can't create socket"); if (do_bind(sock, 0) == -1) err(1, "Can't bind socket"); if (listen(sock, 0) == -1) err(1, "Can't listen on socket"); port = get_bound_port(sock); if (port == -1) err(1, "Can't get bound port"); printf("Bound port = %d\n", port); close(sock); return 0; }
Private
[
?
]
Run code
Submit