mirror of
https://github.com/fluencelabs/redis
synced 2025-03-19 17:10:50 +00:00
anet.c: API to set sockets back to blocking mode.
This commit is contained in:
parent
10aafdad56
commit
74f90c6123
21
src/anet.c
21
src/anet.c
@ -57,24 +57,37 @@ static void anetSetError(char *err, const char *fmt, ...)
|
|||||||
va_end(ap);
|
va_end(ap);
|
||||||
}
|
}
|
||||||
|
|
||||||
int anetNonBlock(char *err, int fd)
|
int anetSetBlock(char *err, int fd, int non_block) {
|
||||||
{
|
|
||||||
int flags;
|
int flags;
|
||||||
|
|
||||||
/* Set the socket non-blocking.
|
/* Set the socket blocking (if non_block is zero) or non-blocking.
|
||||||
* Note that fcntl(2) for F_GETFL and F_SETFL can't be
|
* Note that fcntl(2) for F_GETFL and F_SETFL can't be
|
||||||
* interrupted by a signal. */
|
* interrupted by a signal. */
|
||||||
if ((flags = fcntl(fd, F_GETFL)) == -1) {
|
if ((flags = fcntl(fd, F_GETFL)) == -1) {
|
||||||
anetSetError(err, "fcntl(F_GETFL): %s", strerror(errno));
|
anetSetError(err, "fcntl(F_GETFL): %s", strerror(errno));
|
||||||
return ANET_ERR;
|
return ANET_ERR;
|
||||||
}
|
}
|
||||||
if (fcntl(fd, F_SETFL, flags | O_NONBLOCK) == -1) {
|
|
||||||
|
if (non_block)
|
||||||
|
flags |= O_NONBLOCK;
|
||||||
|
else
|
||||||
|
flags &= ~O_NONBLOCK;
|
||||||
|
|
||||||
|
if (fcntl(fd, F_SETFL, flags) == -1) {
|
||||||
anetSetError(err, "fcntl(F_SETFL,O_NONBLOCK): %s", strerror(errno));
|
anetSetError(err, "fcntl(F_SETFL,O_NONBLOCK): %s", strerror(errno));
|
||||||
return ANET_ERR;
|
return ANET_ERR;
|
||||||
}
|
}
|
||||||
return ANET_OK;
|
return ANET_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int anetNonBlock(char *err, int fd) {
|
||||||
|
return anetSetBlock(err,fd,1);
|
||||||
|
}
|
||||||
|
|
||||||
|
int anetBlock(char *err, int fd) {
|
||||||
|
return anetSetBlock(err,fd,0);
|
||||||
|
}
|
||||||
|
|
||||||
/* Set TCP keep alive option to detect dead peers. The interval option
|
/* Set TCP keep alive option to detect dead peers. The interval option
|
||||||
* is only used for Linux as we are using Linux-specific APIs to set
|
* is only used for Linux as we are using Linux-specific APIs to set
|
||||||
* the probe send time, interval, and count. */
|
* the probe send time, interval, and count. */
|
||||||
|
@ -62,6 +62,7 @@ int anetTcpAccept(char *err, int serversock, char *ip, size_t ip_len, int *port)
|
|||||||
int anetUnixAccept(char *err, int serversock);
|
int anetUnixAccept(char *err, int serversock);
|
||||||
int anetWrite(int fd, char *buf, int count);
|
int anetWrite(int fd, char *buf, int count);
|
||||||
int anetNonBlock(char *err, int fd);
|
int anetNonBlock(char *err, int fd);
|
||||||
|
int anetBlock(char *err, int fd);
|
||||||
int anetEnableTcpNoDelay(char *err, int fd);
|
int anetEnableTcpNoDelay(char *err, int fd);
|
||||||
int anetDisableTcpNoDelay(char *err, int fd);
|
int anetDisableTcpNoDelay(char *err, int fd);
|
||||||
int anetTcpKeepAlive(char *err, int fd);
|
int anetTcpKeepAlive(char *err, int fd);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user