[ create a new paste ] login | about

Link: http://codepad.org/AtjvJaFb    [ raw code | output | fork ]

cky - C, pasted on Feb 27:
#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;
}


Output:
1
Disallowed system call: SYS_socketcall


Create a new paste based on this one


Comments: