Skip to content

Conversation

daurnimator
Copy link
Collaborator

@daurnimator daurnimator commented Oct 31, 2016

Linux has been seen to not repeat errors certain UDP errors:

socket(AF_INET, SOCK_DGRAM|SOCK_CLOEXEC|SOCK_NONBLOCK, IPPROTO_IP) = 5
open("/dev/urandom", O_RDONLY|O_NOCTTY|O_NONBLOCK) = 6
fstat(6, {st_mode=S_IFCHR|0666, st_rdev=makedev(1, 9), ...}) = 0
poll([{fd=6, events=POLLIN}], 1, 10)    = 1 ([{fd=6, revents=POLLIN}])
read(6, "#\361x\3\34\34\302\251\243\"\361\304\0\346\372eh [5K\303\347\27\334\371pY\376\231\2431", 32) = 32
close(6)                                = 0
getuid()                                = 1000
bind(5, {sa_family=AF_INET, sin_port=htons(12738), sin_addr=inet_addr("0.0.0.0")}, 16) = 0
connect(5, {sa_family=AF_INET, sin_port=htons(53), sin_addr=inet_addr("127.0.0.1")}, 16) = 0
sendto(5, "\320O\1\0\0\1\0\0\0\0\0\0\5wrong\7invalid\0\0\1\0\1", 31, 0, NULL, 0) = 31
recvfrom(5, 0x13353ec, 768, 0, NULL, NULL) = -1 ECONNREFUSED (Connection refused)
recvfrom(5, 0x13353ec, 768, 0, NULL, NULL) = -1 EAGAIN (Resource temporarily unavailable)

@wahern I noticed this today. no idea if my fix is along the correct lines.

Up to the first recvfrom is happening during dns resolution inside of cqueues.socket.connect.
The 2nd recvfrom is a following mysocket:connect() (which after getting EAGAIN hangs waiting for a reply which never comes.)

Linux has been seen to not repeat errors on UDP sockets:

socket(AF_INET, SOCK_DGRAM|SOCK_CLOEXEC|SOCK_NONBLOCK, IPPROTO_IP) = 5
open("/dev/urandom", O_RDONLY|O_NOCTTY|O_NONBLOCK) = 6
fstat(6, {st_mode=S_IFCHR|0666, st_rdev=makedev(1, 9), ...}) = 0
poll([{fd=6, events=POLLIN}], 1, 10)    = 1 ([{fd=6, revents=POLLIN}])
read(6, "#\361x\3\34\34\302\251\243\"\361\304\0\346\372eh [5K\303\347\27\334\371pY\376\231\2431", 32) = 32
close(6)                                = 0
getuid()                                = 1000
bind(5, {sa_family=AF_INET, sin_port=htons(12738), sin_addr=inet_addr("0.0.0.0")}, 16) = 0
connect(5, {sa_family=AF_INET, sin_port=htons(53), sin_addr=inet_addr("127.0.0.1")}, 16) = 0
sendto(5, "\320O\1\0\0\1\0\0\0\0\0\0\5wrong\7invalid\0\0\1\0\1", 31, 0, NULL, 0) = 31
recvfrom(5, 0x13353ec, 768, 0, NULL, NULL) = -1 ECONNREFUSED (Connection refused)
recvfrom(5, 0x13353ec, 768, 0, NULL, NULL) = -1 EAGAIN (Resource temporarily unavailable)
@daurnimator
Copy link
Collaborator Author

Possibly related to #156

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant