X-Spam-Check-By: sourceware.org From: Anonymous Comments: This message did not originate from the Sender address above. It was remailed automatically by anonymizing remailer software. Please report problems or inappropriate use to the remailer administrator at . To: cygwin AT cygwin DOT com Subject: Problems with bind and UDP server Message-ID: Date: Wed, 27 Sep 2006 17:14:35 +0200 (CEST) Mailing-List: contact cygwin-help AT cygwin DOT com; run by ezmlm List-Subscribe: List-Archive: List-Post: List-Help: , Sender: cygwin-owner AT cygwin DOT com Mail-Followup-To: cygwin AT cygwin DOT com Delivered-To: mailing list cygwin AT cygwin DOT com Hello, I saw these series of posts on UDP - was there a conclusion to them? http://cygwin.com/ml/cygwin/2006-06/msg00701.html http://cygwin.com/ml/cygwin/2006-06/msg00703.html http://cygwin.com/ml/cygwin/2006-06/msg00705.html http://cygwin.com/ml/cygwin/2006-06/msg00706.html I compile and run net-snmp under cygwin (I have net-snmp 5.3.0.1). The server snmpd by default uses UDP port 161. I now have the most recent cygwin DLL and the server snmpd seems no longer to work. I think I tracked down the problem to the bind command. For a "very simple test" I used Beej's socket programming examples. I give the listings at the end of the message. http://beej.us/guide/bgnet/output/htmlsingle/bgnet.html#listen The listener program works fine on regular Linux and with older cygwin DLLs ..... but under the latest it returns an error. Has something changed? Many Thanks, Mark. ----- reply-to:mark DOT naylor AT I_HATE_SPAM DOT nowhere replace the I_HATE_SPAM.nowhere with schmid-telecom.com to get my real email address ----- listener.c ==== /* ** listener.c -- a datagram sockets "server" demo */ #include #include #include #include #include #include #include #include #include #define MYPORT 4950 // the port users will be connecting to #define MAXBUFLEN 100 int main(void) { int sockfd; struct sockaddr_in my_addr; // my address information struct sockaddr_in their_addr; // connector's address information socklen_t addr_len; int numbytes; char buf[MAXBUFLEN]; if ((sockfd = socket(AF_INET, SOCK_DGRAM, 0)) == -1) { perror("socket"); exit(1); } my_addr.sin_family = AF_INET; // host byte order my_addr.sin_port = htons(MYPORT); // short, network byte order my_addr.sin_addr.s_addr = INADDR_ANY; // automatically fill with my IP memset(&(my_addr.sin_zero), '\0', 8); // zero the rest of the struct if (bind(sockfd, (struct sockaddr *)&my_addr, sizeof(struct sockaddr)) == -1) { perror("bind"); exit(1); } addr_len = sizeof(struct sockaddr); if ((numbytes = recvfrom(sockfd, buf, MAXBUFLEN-1 , 0, (struct sockaddr *)&their_addr, &addr_len)) == -1) { perror("recvfrom"); exit(1); } printf("got packet from %s\n",inet_ntoa(their_addr.sin_addr)); printf("packet is %d bytes long\n",numbytes); buf[numbytes] = '\0'; printf("packet contains \"%s\"\n",buf); close(sockfd); return 0; } ==== talker.c ==== /* ** talker.c -- a datagram "client" demo */ #include #include #include #include #include #include #include #include #include #include #define SERVERPORT 4950 // the port users will be connecting to int main(int argc, char *argv[]) { int sockfd; struct sockaddr_in their_addr; // connector's address information struct hostent *he; int numbytes; if (argc != 3) { fprintf(stderr,"usage: talker hostname message\n"); exit(1); } if ((he=gethostbyname(argv[1])) == NULL) { // get the host info perror("gethostbyname"); exit(1); } if ((sockfd = socket(AF_INET, SOCK_DGRAM, 0)) == -1) { perror("socket"); exit(1); } their_addr.sin_family = AF_INET; // host byte order their_addr.sin_port = htons(SERVERPORT); // short, network byte order their_addr.sin_addr = *((struct in_addr *)he->h_addr); memset(&(their_addr.sin_zero), '\0', 8); // zero the rest of the struct if ((numbytes = sendto(sockfd, argv[2], strlen(argv[2]), 0, (struct sockaddr *)&their_addr, sizeof(struct sockaddr))) == -1) { perror("sendto"); exit(1); } printf("sent %d bytes to %s\n", numbytes, inet_ntoa(their_addr.sin_addr)); close(sockfd); return 0; } -- Unsubscribe info: http://cygwin.com/ml/#unsubscribe-simple Problem reports: http://cygwin.com/problems.html Documentation: http://cygwin.com/docs.html FAQ: http://cygwin.com/faq/