#include "def" main(argc, argv ) int argc; char *argv[]; { int sockfd; char recvline[1024]; char buff[1024]; int n; struct sockaddr_in server, cliaddr, client; struct hostent *hp, *gethostbyname(); int len; fd_set rset; sockfd = socket (AF_INET,SOCK_SEQPACKET,IPPROTO_SCTP); client.sin_family = AF_INET; client.sin_addr.s_addr = htonl(INADDR_ANY); client.sin_port = htons(3131); if ( bind( sockfd, (SA *) &client, sizeof(client) ) < 0 ){ printf("error binding\n"); exit(-1) ; } listen(sockfd, 1); server.sin_family = AF_INET; hp = gethostbyname(argv[1]); bcopy ( hp->h_addr, &(server.sin_addr.s_addr), hp->h_length); server.sin_port = htons(1313); len = sizeof(server); sendto(sockfd, "HI", 3, 0, (SA *) &server, len); len = sizeof(client); getsockname(sockfd, (SA *) &client, &len); printf("my end: %s, port %d\n", inet_ntop(AF_INET, &client.sin_addr, buff, sizeof(buff)), ntohs(client.sin_port)); len = sizeof(server); printf("peer end: from %s, port %d\n", inet_ntop(AF_INET, &server.sin_addr, buff, sizeof(buff)), ntohs(server.sin_port)); FD_ZERO(&rset); FD_SET(sockfd, &rset); printf("before select \n"); select(5, &rset, NULL, NULL, NULL); printf("after select \n"); if (FD_ISSET(sockfd, &rset) ) { len = sizeof(cliaddr); n = recvfrom (sockfd, recvline, sizeof(recvline), 0, (SA *) &cliaddr, &len); printf("recieved from %s, port %d\n", inet_ntop(AF_INET, &cliaddr.sin_addr, buff, sizeof(buff)), ntohs(cliaddr.sin_port)); recvline[n] = 0; /* null terminate */ fputs(recvline, stdout); exit(0); } }