{
cerr << "sdig" << endl;
cerr << "Syntax: sdig IP-ADDRESS-OR-DOH-URL PORT QNAME QTYPE "
-<<<<<<< HEAD
"[dnssec] [ednssubnet SUBNET/MASK] [hidesoadetails] [hidettl] [recurse] [showflags] "
"[tcp] [dot] [insecure] [fastOpen] [subjectName name] [caStore file] [tlsProvider openssl|gnutls] "
"[xpf XPFDATA] [class CLASSNUM] "
-=======
- "[dnssec] [ednssubnet SUBNET/MASK] [hidesoadetails] [hidettl] "
- "[recurse] [showflags] [tcp] [fastopen] [xpf XPFDATA] [class CLASSNUM] "
->>>>>>> 5b8fccd32 (sdig now works with fastopen)
"[proxy UDP(0)/TCP(1) SOURCE-IP-ADDRESS-AND-PORT DESTINATION-IP-ADDRESS-AND-PORT]"
"dumpluaraw"
<< endl;
hidettl = true;
else if (strcmp(argv[i], "tcp") == 0)
tcp = true;
-<<<<<<< HEAD
else if (strcmp(argv[i], "dot") == 0)
dot = true;
else if (strcmp(argv[i], "insecure") == 0)
else if (strcmp(argv[i], "fastOpen") == 0)
fastOpen = true;
else if (strcmp(argv[i], "ednssubnet") == 0) {
-=======
- if (strcmp(argv[i], "fastopen") == 0)
- fastopen = true;
- if (strcmp(argv[i], "ednssubnet") == 0) {
->>>>>>> 5b8fccd32 (sdig now works with fastopen)
if (argc < i + 2) {
cerr << "ednssubnet needs an argument" << endl;
exit(EXIT_FAILURE);
{
#ifdef TCP_FASTOPEN_CONNECT
int on = 1;
- if (setsockopt(d_socket, IPPROTO_TCP, TCP_FASTOPEN_CONNECT, &on, sizeof(on)) < 0)
+ if (setsockopt(d_socket, IPPROTO_TCP, TCP_FASTOPEN_CONNECT, &on, sizeof(on)) < 0) {
throw NetworkError("While setting TCP_FASTOPEN_CONNECT: " + stringerror());
+ }
+#else
+ throw NetworkError("While setting TCP_FASTOPEN_CONNECT: not compiled in");
#endif
}
while(bytes) {
ret=::write(d_socket, ptr, bytes);
if(ret < 0) {
- if(errno==EAGAIN) {
+ // some systems (e.g. OpenBSD) return ENOTCONN on non-blocking sockets on which connect *has been* called
+ // we have to wait for the opportunity to write after the connect is done
+ if (errno == EAGAIN || errno == ENOTCONN) {
ret=waitForRWData(d_socket, false, timeout, 0);
if(ret < 0)
throw NetworkError("Waiting for data write");