1*219b2ee8SDavid du Colombier /* posix */ 2*219b2ee8SDavid du Colombier #include <sys/types.h> 3*219b2ee8SDavid du Colombier #include <unistd.h> 4*219b2ee8SDavid du Colombier #include <stdlib.h> 5*219b2ee8SDavid du Colombier #include <stdio.h> 6*219b2ee8SDavid du Colombier #include <string.h> 7*219b2ee8SDavid du Colombier #include <time.h> 8*219b2ee8SDavid du Colombier 9*219b2ee8SDavid du Colombier /* socket extensions */ 10*219b2ee8SDavid du Colombier #include <sys/socket.h> 11*219b2ee8SDavid du Colombier #include <netinet/in.h> 12*219b2ee8SDavid du Colombier #include <sys/un.h> 13*219b2ee8SDavid du Colombier 14*219b2ee8SDavid du Colombier int rresvport(int * p)15*219b2ee8SDavid du Colombierrresvport(int *p) 16*219b2ee8SDavid du Colombier { 17*219b2ee8SDavid du Colombier int fd; 18*219b2ee8SDavid du Colombier short i; 19*219b2ee8SDavid du Colombier struct sockaddr_in in; 20*219b2ee8SDavid du Colombier static int next; 21*219b2ee8SDavid du Colombier 22*219b2ee8SDavid du Colombier fd = socket(PF_INET, SOCK_STREAM, 0); 23*219b2ee8SDavid du Colombier if(fd < 0) 24*219b2ee8SDavid du Colombier return -1; 25*219b2ee8SDavid du Colombier i = 600 + ((getpid()+next++)%(1024-600)); 26*219b2ee8SDavid du Colombier memset(&in, 0, sizeof(in)); 27*219b2ee8SDavid du Colombier in.sin_family = AF_INET; 28*219b2ee8SDavid du Colombier in.sin_port = htons(i); 29*219b2ee8SDavid du Colombier printf("in.sin_port = %d\n", in.sin_port); 30*219b2ee8SDavid du Colombier if(bind(fd, &in, sizeof(in)) < 0){ 31*219b2ee8SDavid du Colombier close(fd); 32*219b2ee8SDavid du Colombier return -1; 33*219b2ee8SDavid du Colombier } 34*219b2ee8SDavid du Colombier if(p) 35*219b2ee8SDavid du Colombier *p = i; 36*219b2ee8SDavid du Colombier return fd; 37*219b2ee8SDavid du Colombier } 38