2009年12月02日
ノンブロッキングモードのsocket
ちょいとメモ。bind
bzero((char *)&_srcAddr, sizeof(_srcAddr));
_srcAddr.sin_port = htons(port);
_srcAddr.sin_family = AF_INET;
_srcAddr.sin_addr.s_addr = INADDR_ANY;
// ソケットの生成(ストリーム型)
serverSocket = socket(AF_INET, SOCK_STREAM, 0);
int sock_option = 1;
setsockopt(serverSocket,SOL_SOCKET,SO_REUSEADDR,&sock_option ,sizeof(sock_option ));
// ソケットのバインド
if( bind(serverSocket, (struct sockaddr *)&_srcAddr, sizeof(_srcAddr)) == -1 ){
LOG4CXX_ERROR( logger , "Socket Bind Error !!");
return false;
}
LOG4CXX_DEBUG( logger , "Socket Bind success.");
accept
ここでノンブロッキングモードの設定
_dstAddrSize = sizeof(_dstAddr); // これ必要
dstSocket = accept( serverSocket , (struct sockaddr *)&_dstAddr, &_dstAddrSize);
// TEST ノンブロッキングモード
u_long val=1;
ioctl(dstSocket, FIONBIO, &val);
LOG4CXX_DEBUG( logger , "accept!! socket=" << dstSocket);
if( errno != EINPROGRESS ){
LOG4CXX_DEBUG( logger , "SOCKET ERROR! " << errno);
}
データ受信
int length = recv( sock , buff , BUFFER_SIZE , 0);
if (errno == EAGAIN){
// 何も無し
}
"ノンブロッキングモードのsocket"へのコメントはまだありません。