Revision: 10030 http://pure-data.svn.sourceforge.net/pure-data/?rev=10030&view=rev Author: mrpeach Date: 2008-06-18 10:30:18 -0700 (Wed, 18 Jun 2008)
Log Message: ----------- Clarify what SO_REUSEADDR is for, no code changes.
Modified Paths: -------------- trunk/externals/mrpeach/net/udpreceive.c
Modified: trunk/externals/mrpeach/net/udpreceive.c =================================================================== --- trunk/externals/mrpeach/net/udpreceive.c 2008-06-18 17:15:18 UTC (rev 10029) +++ trunk/externals/mrpeach/net/udpreceive.c 2008-06-18 17:30:18 UTC (rev 10030) @@ -29,7 +29,7 @@ { t_object x_obj; t_outlet *x_msgout; - t_outlet *x_addrout; + t_outlet *x_addrout; int x_connectsocket; t_atom x_addrbytes[4]; t_atom x_msgoutbuf[MAX_UDP_RECEIVE]; @@ -46,14 +46,14 @@ int i, read = 0; struct sockaddr_in from; socklen_t fromlen = sizeof(from); - long addr; + long addr;
- read = recvfrom(sockfd, x->x_msginbuf, MAX_UDP_RECEIVE, 0, (struct sockaddr *)&from, &fromlen); + read = recvfrom(sockfd, x->x_msginbuf, MAX_UDP_RECEIVE, 0, (struct sockaddr *)&from, &fromlen); #ifdef DEBUG post("udpreceive_read: read %lu x->x_connectsocket = %d", read, x->x_connectsocket); #endif - /* get the sender's ip */ + /* get the sender's ip */ addr = ntohl(from.sin_addr.s_addr); x->x_addrbytes[0].a_w.w_float = (addr & 0xFF000000)>>24; x->x_addrbytes[1].a_w.w_float = (addr & 0x0FF0000)>>16; @@ -61,7 +61,7 @@ x->x_addrbytes[3].a_w.w_float = (addr & 0x0FF); outlet_list(x->x_addrout, &s_list, 4L, x->x_addrbytes);
- if (read < 0) + if (read < 0) { sys_sockerror("udpreceive_read"); sys_closesocket(x->x_connectsocket); @@ -87,7 +87,7 @@ int sockfd, portno = fportno; int intarg, i;
- /* create a socket */ + /* create a socket */ sockfd = socket(AF_INET, SOCK_DGRAM, 0); #ifdef DEBUG post("udpreceive_new: socket %d port %d", sockfd, portno); @@ -100,7 +100,8 @@ server.sin_family = AF_INET; server.sin_addr.s_addr = INADDR_ANY;
- /* ask OS to allow another Pd to repoen this port after we close it. */ + /* enable delivery of all multicast or broadcast (but not unicast) + * UDP datagrams to all sockets bound to the same port */ intarg = 1; if (setsockopt(sockfd, SOL_SOCKET, SO_REUSEADDR, (char *)&intarg, sizeof(intarg)) < 0) @@ -113,7 +114,7 @@ if (bind(sockfd, (struct sockaddr *)&server, sizeof(server)) < 0) { sys_sockerror("udpreceive: bind"); - sys_closesocket(sockfd); + sys_closesocket(sockfd); return (0); } x = (t_udpreceive *)pd_new(udpreceive_class); @@ -123,10 +124,10 @@
/* convert the bytes in the buffer to floats in a list */ for (i = 0; i < MAX_UDP_RECEIVE; ++i) - { - x->x_msgoutbuf[i].a_type = A_FLOAT; - x->x_msgoutbuf[i].a_w.w_float = 0; - } + { + x->x_msgoutbuf[i].a_type = A_FLOAT; + x->x_msgoutbuf[i].a_w.w_float = 0; + } for (i = 0; i < 4; ++i) { x->x_addrbytes[i].a_type = A_FLOAT; @@ -152,5 +153,4 @@ sizeof(t_udpreceive), CLASS_NOINLET, A_DEFFLOAT, 0); }
-/* end x_net_udpreceive.c */ - +/* end udpreceive.c */
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.