
On Tue, 5 Oct 2004 12:00:37 -0000 (UTC), dave@superelite.net <dave@superelite.net> wrote:
OK, awake again and looking into the beolow problem more... my program pulls a message off of a UDP datagram socket with
int s = socket(AF_INET, SOCK_DGRAM, 0); int iVal; struct sockaddr_in oFromAddr; char msg[1024]; int iMsgLen; socklen_t iFromLen;
oMyAddr.sin_family = AF_INET; oMyAddr.sin_addr.s_addr = htonl(INADDR_ANY); oMyAddr.sin_port = htons(5060); iVal = bind(s, (struct sockaddr *) &oMyAddr, sizeof (oMyAddr));
int iVal = recvfrom(s, (void *)&msg, iMsgLen, 0, (struct sockaddr *) &oFromAddr, &iFromLen);
If this is the actual code, iMsgLen is being used uninitialized. Also, you're passing the address of msg, which is incorrect. Here's working code: #include <iostream> #include <cstdlib> #include <cstdio> #include <sys/types.h> #include <sys/socket.h> #include <netinet/in.h> using namespace std; int main () { int s = socket (AF_INET, SOCK_DGRAM, 0); if (s < 0) { perror ("socket"); return 1; } struct sockaddr_in addr = {0}; addr.sin_family = AF_INET; addr.sin_addr.s_addr = htonl(INADDR_ANY); addr.sin_port = htons(5060); if (bind (s, (struct sockaddr *) &addr, sizeof (addr)) != 0) { perror ("bind"); return 1; } char msg[1024]; while (1) { socklen_t addrlen = sizeof (addr); int len = recvfrom (s, (void *) msg, sizeof (msg), 0, (struct sockaddr*) &addr, &addrlen); if (len <= 0) { perror ("recvfrom"); return 1; } cout.write (msg, len); cout.flush (); } return 0; } -- Caleb Epstein caleb.epstein@gmail.com