- 论坛徽章:
- 0
|
我的表达能力比较差,请大家多包涵.
我的问题是:一个udp程序,主线程已经bind了,新开了一个线程,这个线程把端口改为0,再bind一次,这种做法是否正确,为什么要这么做?具体看下面代码.
- void* fn(void *arg){
- int sock = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);
-
- server.sin_family = AF_INET;
- server.sin_addr.s_addr = INADDR_ANY;
- server.sin_port = 0;//这里把端口设成0
- bind(sock, (struct sockaddr *)&server, sizeof(server)) ;//主线程里已经bind过了,在这里再次bind,不知道为什么要这样做?
- ..................
- }
-
- main(){
- struct sockaddr_in addr;
- int sock=socket(AF_INET,SOCK_DGRAM, IPPROTO_UDP);
- addr.sin_family=AF_INET;
- addr.sin_addr.s_addr=INADDR_ANY;
- addr.sin_port=htons(9000);
- bind(sock,(struct sockaddr*)&addr,sizeof(addr));//在这里主线程已经bind了
- ................
- pthread_create(&pid,NULL,fn,&other_args);
- ...............
- }
复制代码
[ 本帖最后由 xxldc 于 2008-4-16 12:47 编辑 ] |
|