#include #include #include #include #include #include #include #include #include int main(int argc, char **argv) { int yes=1; int pid; int udpsock; struct sockaddr_in server; struct sockaddr_in client; int length=sizeof(struct sockaddr_in); if(argc!=2) { fprintf(stdout,"usage: %s \n",argv[0]); fflush(stdout); return -1; } if((udpsock=socket(AF_INET,SOCK_DGRAM,0))==-1) { fprintf(stdout,"error occurred while creating socket %d %s\n",errno,strerror(errno)); fflush(stdout); return -1; } if(setsockopt(udpsock,SOL_SOCKET,SO_REUSEADDR,&yes,sizeof(int)) == -1) { fprintf(stdout,"error occurred while setting socket option %d %s\n",errno,strerror(errno)); fflush(stdout); } server.sin_family=AF_INET; server.sin_port=htons(atoi(argv[1])); server.sin_addr.s_addr=INADDR_ANY; memset(server.sin_zero,0,8); if(bind(udpsock,(struct sockaddr *)&server,sizeof(struct sockaddr_in))!=0) { fprintf(stdout,"failed to bind socket to server address %d %s\n",errno,strerror(errno)); fflush(stdout); return -1; } if(recvfrom(udpsock,&pid,sizeof(int),0,(struct sockaddr*)&client,(socklen_t*)&length)<0) { fprintf(stdout,"failed to recv on socket %d %s\n",errno,strerror(errno)); fflush(stdout); } else { fprintf(stdout,"the process id of the client process is %d\n",pid); fflush(stdout); } close(udpsock); return 0; }