Skip to content

Instantly share code, notes, and snippets.

@yoku0825
Created February 13, 2015 01:43
Show Gist options
  • Save yoku0825/02260d403f82a60c8782 to your computer and use it in GitHub Desktop.
Save yoku0825/02260d403f82a60c8782 to your computer and use it in GitHub Desktop.
  • php_memcached.c
4336     REGISTER_MEMC_CLASS_CONST_LONG(OPT_SEND_TIMEOUT, MEMCACHED_BEHAVIOR_SND_TIMEOUT);
  • libmemcached/connect.cc
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) などにはタイムアウトは影響を及ぼさない。
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment