首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 操作系统 > UNIXLINUX >

多线程中调用sendto,线程数一多下床,出现 bad file descriptor

2013-12-21 
多线程中调用sendto,线程数一多起来,出现 bad file descriptor在使用多线程调用函数sendto进行无连接的发

多线程中调用sendto,线程数一多起来,出现 bad file descriptor
在使用多线程调用函数sendto进行无连接的发包时,两三个线程可以正常跑,但是线程数一多,就出现了
sendto: Bad file descriptor
线程函数中的部分代码如下:
    pingsock = socket(AF_INET, SOCK_RAW, 1);
    if (pingsock < 0) {
        printf("the skt is %d\n", skt);
        return NULL;
    }
    setsockopt(pingsock, SOL_SOCKET, SO_SNDTIMEO, (char *)&nNetTimeout, sizeo(int));
    c = sendto(pingsock, packet, sizeof(packet), 0, (struct sockaddr *)&pingaddr[index], sizeof(struct sockaddr_in));
    if (c < 0) {
        perror(" sendto: ");
        close(pingsock);
        return NULL;
    }

是不是一个socket只能由一个线程使用,这里要多个线程的话,得开多个socket,一个线程用一个?还是说有其他问题呢?

[解决办法]
当然了,并发socket除非这个socket是udp>
[解决办法]
你只开 socket 不关 socket 当然有问题了. 
[解决办法]

引用:
Quote: 引用:

Quote: 引用:

当然了,并发socket除非这个socket是udp>

谢谢指导,我刚刚也试了试一个线程用一个socket的方法,虽然解决了sendto的问题,但是引入了新问题,比如指定要发sendto5个icmp报文,结果发了一百多个duplicate 报文后,才发送完毕,这该怎么办哦[/quote讲错了,是接受到了100多个duplicate报文,每个线程都是ping 的不同ip地址的


多个Thread 调用同一个 socket ,你注意同步了吗?

热点排行