ssize_t
ngx_syslog_send(ngx_syslog_peer_t *peer, u_char *buf, size_t len)
{
+ ssize_t n;
+
if (peer->conn.fd == (ngx_socket_t) -1) {
if (ngx_syslog_init_peer(peer) != NGX_OK) {
return NGX_ERROR;
peer->conn.log = ngx_cycle->log;
if (ngx_send) {
- return ngx_send(&peer->conn, buf, len);
+ n = ngx_send(&peer->conn, buf, len);
} else {
/* event module has not yet set ngx_io */
- return ngx_os_io.send(&peer->conn, buf, len);
+ n = ngx_os_io.send(&peer->conn, buf, len);
+ }
+
+#if (NGX_HAVE_UNIX_DOMAIN)
+
+ if (n == NGX_ERROR && peer->server.sockaddr->sa_family == AF_UNIX) {
+
+ if (ngx_close_socket(peer->conn.fd) == -1) {
+ ngx_log_error(NGX_LOG_ALERT, ngx_cycle->log, ngx_socket_errno,
+ ngx_close_socket_n " failed");
+ }
+
+ peer->conn.fd = (ngx_socket_t) -1;
}
+
+#endif
+
+ return n;
}
/* prevents further use of this peer */
peer->busy = 1;
+ if (peer->conn.fd == (ngx_socket_t) -1) {
+ return;
+ }
+
if (ngx_close_socket(peer->conn.fd) == -1) {
ngx_log_error(NGX_LOG_ALERT, ngx_cycle->log, ngx_socket_errno,
ngx_close_socket_n " failed");