# Epoll\_ctl failed (17: File exists)

**URL:** <https://www.ruby-forum.com/t/epoll-ctl-failed-17-file-exists/186507>\
**Category:** NGINX\
**Created:** [April 8, 2010, 3:18am UTC](https://www.ruby-forum.com/t/epoll-ctl-failed-17-file-exists/186507 "2010-04-08T03:18:02Z")\
**Posts on this page:** 4\
**Page:** 1

<div class="post-metadata">

**Author:** ![Matthias-Christian\_S](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/m/cab0a1/32.png) [@Matthias-Christian\_S](https://www.ruby-forum.com/u/Matthias-Christian_S)\
**Post date:** [April 8, 2010, 3:18am UTC](https://www.ruby-forum.com/t/epoll-ctl-failed-17-file-exists/186507/1 "2010-04-08T03:18:02Z")

</div>

Hi,

when I run ‘/etc/init.d/nginx reload’ on Debian, I get the following  
error message in /var/log/nginx/error.log and I have to restart nginx:

2010/04/08 03:07:23 [alert] 10719#0: epoll\_ctl(1, 7) failed (17: File  
exists)

$ nginx -V  
nginx version: nginx/0.7.65  
TLS SNI support enabled  
configure arguments: --conf-path=/etc/nginx/nginx.conf  
–error-log-path=/var/log/nginx/error.log --pid-path=/var/run/nginx.pid  
–lock-path=/var/lock/nginx.lock  
–http-log-path=/var/log/nginx/access.log  
–http-client-body-temp-path=/var/lib/nginx/body  
–http-proxy-temp-path=/var/lib/nginx/proxy  
–http-fastcgi-temp-path=/var/lib/nginx/fastcgi --with-debug  
–with-http\_stub\_status\_module --with-http\_flv\_module  
–with-http\_ssl\_module --with-http\_dav\_module  
–with-http\_gzip\_static\_module --with-http\_realip\_module --with-mail  
–with-mail\_ssl\_module --with-ipv6 --with-http\_geoip\_module  
–add-module=/tmp/buildd/nginx-0.7.65/modules/nginx-upstream-fair

$ cat /etc/nginx/nginx.conf  
user www-data;  
worker\_processes 1;

error\_log /var/log/nginx/error.log;  
pid /var/run/nginx.pid;

events {  
worker\_connections 1024;  
# multi\_accept on;  
}

http {  
include /etc/nginx/mime.types;

```
access_log /var/log/nginx/access.log;

sendfile on;
#tcp_nopush on;

#keepalive_timeout 0;
keepalive_timeout 65;
tcp_nodelay on;

gzip on;
gzip_static on;
gzip_http_version 1.1;
gzip_proxied expired no-cache no-store private auth;
gzip_disable "MSIE [1-6]\.(?!.*SV1)";
gzip_vary on;

include /etc/nginx/conf.d/*.conf;
include /etc/nginx/sites-enabled/*;

```

}

# uname -a

Linux [example.com](http://example.com) 2.6.26-2-openvz-amd64 #1 SMP Thu Aug 6 01:50:56 UTC  
2009 x86\_64 GNU/Linux

# mail {

[…]

Any ideas?

Regards,  
Matthias-Christian

---

<div class="post-metadata">

**Author:** ![Matthias-Christian\_S](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/m/cab0a1/32.png) [@Matthias-Christian\_S](https://www.ruby-forum.com/u/Matthias-Christian_S)\
**Post date:** [April 8, 2010, 3:24am UTC](https://www.ruby-forum.com/t/epoll-ctl-failed-17-file-exists/186507/2 "2010-04-08T03:24:28Z")

</div>

On Thu, Apr 08, 2010 at 03:17:09AM +0200, Matthias-Christian O. wrote:

> configure arguments: --conf-path=/etc/nginx/nginx.conf  
> –add-module=/tmp/buildd/nginx-0.7.65/modules/nginx-upstream-fair  
> # multi\_accept on;  
> #keepalive\_timeout 0;  
> include /etc/nginx/conf.d/_.conf;  
> include /etc/nginx/sites-enabled/_;  
> }
> 
> # uname -a
> 
> Linux [example.com](http://example.com) 2.6.26-2-openvz-amd64 #1 SMP Thu Aug 6 01:50:56 UTC 2009 x86\_64 GNU/Linux
> 
> # mail {
> 
> […]

This should read:

# mail {

[…]

$ uname -a  
Linux [example.com](http://example.com) 2.6.26-2-openvz-amd64 #1 SMP Thu Aug 6 01:50:56 UTC  
2009 x86\_64 GNU/Linux

Regards,  
Matthias-Christian

---

<div class="post-metadata">

**Author:** ![Matthias-Christian\_S](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/m/cab0a1/32.png) [@Matthias-Christian\_S](https://www.ruby-forum.com/u/Matthias-Christian_S)\
**Post date:** [April 12, 2010, 2:23pm UTC](https://www.ruby-forum.com/t/epoll-ctl-failed-17-file-exists/186507/3 "2010-04-12T14:23:19Z")

</div>

Hi,

it took a while to find the bug, but the patch is trivial:

— src/core/ngx\_cycle.c~ 2009-10-26 17:22:24.000000000 +0100  
+++ src/core/ngx\_cycle.c 2010-04-11 21:14:43.997932783 +0200  
@@ -847,7 +847,7 @@  
sin61 = (struct sockaddr\_in6 \*) sa1;  
sin62 = (struct sockaddr\_in6 \*) sa2;

- 

```
   if (sin61->sin6_port != sin61->sin6_port) {

```

- 

```
   if (sin61->sin6_port != sin62->sin6_port) {
       return NGX_DECLINED;
   }

```

Without the patch reloading will fail, because nginx thinks the two IPv6  
addresses are the same regardless of the port.

Regards,  
Matthias-Christian

---

<div class="post-metadata">

**Author:** ![Matthias-Christian\_S](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/m/cab0a1/32.png) [@Matthias-Christian\_S](https://www.ruby-forum.com/u/Matthias-Christian_S)\
**Post date:** [April 12, 2010, 5:44pm UTC](https://www.ruby-forum.com/t/epoll-ctl-failed-17-file-exists/186507/4 "2010-04-12T17:44:11Z")

</div>

Hello!

On Sun, Apr 11, 2010 at 09:20:17PM +0200, Matthias-Christian O. wrote:

> - 
> 
> ```
> if (sin61->sin6_port != sin61->sin6_port) {
> 
> ```
> 
> - 
> 
> ```
> if (sin61->sin6_port != sin62->sin6_port) {
> return NGX_DECLINED;
> }
> 
> ```
> 
> Without the patch reloading will fail, because nginx thinks the two IPv6  
> addresses are the same regardless of the port.

Good catch, thanks.

Maxim D.
