4336 REGISTER_MEMC_CLASS_CONST_LONG(OPT_SEND_TIMEOUT, MEMCACHED_BEHAVIOR_SND_TIMEOUT);
323 #ifdef HAVE_SNDTIMEO
324 if (server->root->snd_timeout > 0)
325 {
326 struct timeval waittime;
327
328 waittime.tv_sec= server->root->snd_timeout / 1000000;
329 waittime.tv_usec= server->root->snd_timeout % 1000000;
330
331 int error= setsockopt(server->fd, SOL_SOCKET, SO_SNDTIMEO,
332 (char*)&waittime, (socklen_t)sizeof(struct timeval));
333 (void)error;
334 assert(error == 0);
335 }
336 #endif
SO_RCVTIMEO と SO_SNDTIMEO
送信・受信のタイムアウトを指定する。これを越えるとエラーを報告する。 引き数は struct timeval である。 入出力関数がタイムアウト時間の間ブロックされ、かつデータの送信または 受信が行われていた場合は、転送されたデータ量が関数の返り値となる。 何もデータが転送されずにタイムアウトに達した場合は、 -1 を返し、 errno に EAGAIN か EWOULDBLOCK か EINPROGRESS (connect(2) の場合) が設定され、 あたかもソケットに非ブロッキングが指定されたように見える。 タイムアウト値に (デフォルト値である) 0 に設定すると、 操作は決してタイムアウトしなくなる。 タイムアウトが影響を及ぼすのは、 ソケット I/O を実行するシステムコールだけ (例えば read(2), recvmsg(2), send(2), sendmsg(2)) である。 select(2), poll(2), epoll_wait(2) などにはタイムアウトは影響を及ぼさない。