c++客户端套接字同时连接
c++ client socket simultaneously connection
你好,我有一个客户端套接字应用程序,与此同时,在linux中使用tcpip连接超过5000个服务器,但是当我打开套接字连接时,几乎所有连接,检索错误操作现在正在进行中。
下面是我的客户端套接字连接代码:我怎么能同时做一个很好的数千套接字连接?对不起,我的英语不好。下面是我的代码:struct sockaddr_in echoserver;
struct sockaddr_in sa_loc;
char aport[64];
int optval = 1;
int sock;
memset(&echoserver, 0, sizeof (echoserver));
echoserver.sin_family = AF_INET;
echoserver.sin_addr.s_addr = inet_addr(server.c_str());
echoserver.sin_port = htons(0);
SOCKET = socket(AF_INET, SOCK_STREAM, 0);
if (SOCKET == -1)
{
iLastError = errno;
strLastError = "Create socket Error : "+string(strerror(errno));
connected = false;
return connected;
}
struct timeval timeouts, timeoutr;
memset(&timeouts, 0, sizeof(timeouts)); // zero timeout struct before use
timeouts.tv_sec = SendTimeOut/1000;
timeouts.tv_usec = 0;
memset(&timeoutr, 0, sizeof(timeoutr)); // zero timeout struct before use
timeoutr.tv_sec = ReceiveTimeOut/1000;
timeoutr.tv_usec = 0;
int sockopt = setsockopt(SOCKET, SOL_SOCKET, SO_SNDTIMEO, &timeouts, sizeof(timeouts));
if (sockopt == -1)
{
printf("%s%s","Set socket Option error : ",strerror(errno));
iLastError = errno;
strLastError = "setsockopt Error : "+string(strerror(errno));
}
sockopt = setsockopt(SOCKET, SOL_SOCKET, SO_RCVTIMEO, &timeoutr, sizeof(timeoutr)); //
if (sockopt == -1)
{
printf("%s%s","Set socket Option error : ",strerror(errno));
iLastError = errno;
strLastError = "setsockopt Error : "+string(strerror(errno));
}
memset(&sa_loc, 0, sizeof(struct sockaddr_in));
sa_loc.sin_family = AF_INET;
sa_loc.sin_port = htons(0); //8000
sa_loc.sin_addr.s_addr = inet_addr(SourceIP.c_str());
int bindid = bind(SOCKET, (struct sockaddr *)&sa_loc, sizeof(sa_loc));
if (bindid !=0)
{
iLastError = errno;
strLastError = "Bind Error : "+string(strerror(errno));
}
int conn = connect(SOCKET, (struct sockaddr *) &echoserver, sizeof(echoserver));
if (conn == -1)
{
strLastError = "Connect Error : "+string(strerror(errno));
connected = false;
}
else {
connected = true;
}
return connected;
wpp 如果变量SendTimeOut
为<1000那么你的recv超时将是0,我不确定这是否与设置O_NONBLOCK相同,但如果是,那么听起来这是正常的过程,你应该循环,直到它成功(或你得到EISCONN)或失败与不同的错误代码。如果你想这样做,你应该显式地设置O_NONBLOCK。
EINPROGRESS为套接字的文件描述符设置了O_NONBLOCK,连接不能立即建立;该连接将异步建立。
…
如果连接不能立即建立,并且为套接字的文件描述符设置了O_NONBLOCK,则connect()将失败并将errno设置为[EINPROGRESS],但连接请求不会被中止,连接将异步建立。在连接建立之前,对同一套接字的后续调用connect()将失败并将errno设置为[EALREADY]。
相关文章:
- 当套接字连接断开时检测C/C++Unix
- 套接字连接"Operation not permitted"错误,甚至使用升压/平发器根.cpp
- C++套接字客户端到 Python 服务器未创建连接
- 在不知道套接字的情况下关闭网络连接
- 当对套接字 send() 的同步调用由于连接另一端丢失而被阻止时,如何恢复?
- 当客户端在 write() 期间终止连接时,由对等套接字错误重置连接
- 从网链套接字请求连接设备的列表
- C++ TCP 套接字通信 - 连接按预期工作,几秒钟后失败,没有收到新数据,read() 和 recv() 块
- 如何在 2 台主机之间保持 UDP 套接字连接打开
- C++关闭套接字以启动新连接
- Opencv 不适用于套接字连接
- 使用单个套接字处理多个传入的 UDP 连接
- 连接UDP套接字,但仍然接收来自其他源的数据报
- C++通过套接字连接发送矢量
- 为什么我在蓝牙连接()上收到"java.io.IOException:读取失败,套接字可能关闭或超时,读取re
- boost1.62 在 docker 容器中重新连接后套接字损坏
- 尝试连接到 TCP 套接字 (Linux) 时连接被拒绝
- 仅通过建立一次TCP连接将Recv从客户端发送到服务器套接字
- 接受套接字,但m_socket.远程终结点引发 传输终结点未连接
- 提振.Asio:对每个连接/套接字使用“io_service”是件好事吗?