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){
  // 何も無し
}

Comment on "ノンブロッキングモードのsocket"

"ノンブロッキングモードのsocket"へのコメントはまだありません。

Post a Comment

コメントする

コメント登録機能が設定されていますが、TypeKey トークンが設定されていません。