小编APo*_*ter的帖子

Linux C ++套接字选择循环

我在使用套接字时遇到了一些麻烦,在循环时,除了第一个循环外,我没有收到任何数据,每次都超时。如果我关闭并重新打开套接字,则每个循环虽然我似乎都能正确获取数据。有什么想法吗?

不关闭而循环的示例:

int socketHandle = socket(AF_INET,SOCK_DGRAM,0);

sockaddr_in serverAddr;

serverAddr.sin_family = AF_INET;
serverAddr.sin_addr.s_addr = inet_addr(/*UDP IP ADDRESS*/);
serverAddr.sin_port = htons(/*UDP PORT*/);

struct timeval tv;
fd_set rfds;

FD_ZERO(&rfds);
FD_SET(socketHandle, &rfds);

tv.tv_usec = 0.0;
int recVal = 0;
int sockLen = sizeof(serverAddr);
bind(socketHandle, (struct sockaddr*)&serverAddr, (socklen_t)sockLen);

bool timePassed = false;
time_t startListenTime = time(NULL);

tv.tv_sec = maxUpdateTime;

while(true)
{
    recVal = select(socketHandle + 1, &rfds, NULL, NULL, &tv);
    switch(recVal)
    {
        case(0):
        {
            //Timeout
            break;
        }
        case(-1):
        {
            //Error
             break;
        }
        default:
        {
            /*Packet …
Run Code Online (Sandbox Code Playgroud)

c c++ sockets linux select

0
推荐指数
1
解决办法
1万
查看次数

标签 统计

c ×1

c++ ×1

linux ×1

select ×1

sockets ×1