(下面列出的原始问题)原来我有一个“消费缓慢”的问题。由于我无法控制服务器程序,因此我尝试设置 setsockopt(m_sock,
IPPROTO_TCP,
TCP_NODELAY,
(char *) &flag,
sizeof(int));
但我仍然到了写入套接字需要几秒钟的时间。我错过了什么吗?原始问题:我使用创建了一个套接字
m_sock = socket(AF_INET, SOCK_STREAM, 0);
将其设置为非阻塞:
int opts = fcntl ( m_sock, F_GETFL );
opts = ( opts | O_NONBLOCK );
fcntl ( m_sock, F_SETFL,opts );
然后发送
send(m_sock, v_pData, v_iDataSize, MSG_NOSIGNAL);
我正在发送大约 200bytes ,大约 2 分钟后每秒 5 次,它会创建一个很大的缓冲区并在发送数据时产生很大的延迟。有没有办法提高发送性能?
第一次编辑: 我正在添加更多关于如何创建和使用套接字的代码:
m_sock = socket ( AF_INET,
SOCK_STREAM,
0 );
if ( ! is_valid() )
return false;
int on = 1;
if ( setsockopt ( m_sock, SOL_SOCKET, SO_REUSEADDR, ( const char* ) &on, sizeof ( on ) ) == -1 )
return false;
server = gethostbyname(host.c_str());
if (server == NULL) {
return false;
}
bzero((char *) &serv_addr, sizeof(serv_addr));
serv_addr.sin_family = AF_INET;
bcopy((char *)server->h_addr,
(char *)&serv_addr.sin_addr.s_addr,
server->h_length);
serv_addr.sin_port = htons(portno);
set_non_blocking(true);// Code for set_non_blocking mentioned above
connect(m_sock,(struct sockaddr *) &serv_addr,sizeof(serv_addr)) ;
我使用以下方法写入套接字:
iOut = send(m_sock, v_pData, v_iDataSize, MSG_NOSIGNAL);