相关疑难解决方法(0)

检查插座是否已连接

我有一个应用程序需要在某个时间将一些数据发送到服务器.简单的方法是关闭连接,然后当我想发送东西时再次打开它.但是我想保持连接打开,所以当我想发送数据时,我首先使用这个函数检查连接:

bool is_connected(int sock)
{
    unsigned char buf;
    int err = recv(sock,&buf,1,MSG_PEEK);
    return err == -1 ? false : true;
}
Run Code Online (Sandbox Code Playgroud)

不好的是,这不起作用.当没有数据要接收时它会挂起.我能做什么?如何检查连接是否仍然打开?

c c++ sockets connection

17
推荐指数
3
解决办法
7万
查看次数

重新创建套接字时绑定错误

A具有以下侦听器套接字:

int sd = socket(PF_INET, SOCK_STREAM, 0);

struct sockaddr_in addr;
bzero(&addr, sizeof(addr));
addr.sin_family = AF_INET;
addr.sin_port = htons(http_port);
addr.sin_addr.s_addr = INADDR_ANY;

if(bind(sd,(sockaddr*)&addr,sizeof(addr))!=0)
{
    ...
}

if (listen(sd, 16)!=0)
{
    ...
}

int sent = 0;
for(;;) {
    int client = accept(sd, (sockaddr*)&addr, (socklen_t*)&size);
    if (client > 0)
    {
        ...
        close(client);
    }
}
Run Code Online (Sandbox Code Playgroud)

如果使用

close(sd);
Run Code Online (Sandbox Code Playgroud)

然后尝试使用相同的代码重新创建套接字,发生绑定错误,并且仅在30-60秒后成功创建新套接字.

有没有办法以一些很酷的方式创建或关闭以避免绑定错误?

c sockets bind

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

标签 统计

c ×2

sockets ×2

bind ×1

c++ ×1

connection ×1