diff options
-rw-r--r-- | src/common.c | 32 | ||||
-rw-r--r-- | src/proxyfunc.c | 32 | ||||
-rw-r--r-- | src/ssl.c | 4 |
3 files changed, 34 insertions, 34 deletions
diff --git a/src/common.c b/src/common.c index 5f63c15..8da909c 100644 --- a/src/common.c +++ b/src/common.c @@ -145,3 +145,35 @@ done: } return(0); } + +/*! If you are calling ast_carefulwrite, it is assumed that you are calling + it on a file descriptor that _DOES_ have NONBLOCK set. This way, + there is only one system call made to do a write, unless we actually + have a need to wait. This way, we get better performance. */ +int ast_carefulwrite(int fd, char *s, int len, int timeoutms) +{ + /* Try to write string, but wait no more than ms milliseconds + before timing out */ + int res=0; + struct pollfd fds[1]; + while(len) { + res = m_send(fd, s, len); + if ((res < 0) && (errno != EAGAIN)) { + return -1; + } + if (res < 0) res = 0; + len -= res; + s += res; + res = 0; + if (len) { + fds[0].fd = get_real_fd(fd); + fds[0].events = POLLOUT; + /* Wait until writable again */ + res = poll(fds, 1, timeoutms); + if (res < 1) + return -1; + } + } + return res; +} + diff --git a/src/proxyfunc.c b/src/proxyfunc.c index 2992267..54df298 100644 --- a/src/proxyfunc.c +++ b/src/proxyfunc.c @@ -387,35 +387,3 @@ void *SendError(struct mansession *s, char *errmsg) { return 0; } - -/*! If you are calling ast_carefulwrite, it is assumed that you are calling - it on a file descriptor that _DOES_ have NONBLOCK set. This way, - there is only one system call made to do a write, unless we actually - have a need to wait. This way, we get better performance. */ -int ast_carefulwrite(int fd, char *s, int len, int timeoutms) -{ - /* Try to write string, but wait no more than ms milliseconds - before timing out */ - int res=0; - struct pollfd fds[1]; - while(len) { - res = m_send(fd, s, len); - if ((res < 0) && (errno != EAGAIN)) { - return -1; - } - if (res < 0) res = 0; - len -= res; - s += res; - res = 0; - if (len) { - fds[0].fd = get_real_fd(fd); - fds[0].events = POLLOUT; - /* Wait until writable again */ - res = poll(fds, 1, timeoutms); - if (res < 1) - return -1; - } - } - return res; -} - @@ -142,8 +142,8 @@ int sec_getslot(void) return i; } -/*! \brief Accepts the ssl connection. Retrurns the negative fd. negative fd's are - * choosen to differentiate between ssl and non-ssl connections. positive +/*! \brief Accepts the ssl connection. Returns the negative fd. negative fd's are + * chosen to differentiate between ssl and non-ssl connections. Positive * fd's are used for non-ssl connections and negative fd's are used for ssl * connections. So we purposefully calculate and return negative fds. * You can always get positive fd by calling get_real_fd(negative fd). |