(元の問題は以下にリストされています) 「消費が遅い」問題があることが判明しました。サーバープログラムを制御できないので、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 分後に 1 秒間に 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);