if (!setSocketTimestamps(s))
g_log<<Logger::Warning<<"Unable to enable timestamp reporting for socket"<<endl;
+ if (locala.isIPv4()) {
+ try {
+ setSocketIgnorePMTU(s);
+ }
+ catch(const std::exception& e) {
+ g_log<<Logger::Warning<<"Failed to set IP_MTU_DISCOVER on UDP server socket: "<<e.what()<<endl;
+ }
+ }
+
#ifdef SO_REUSEPORT
if( d_can_reuseport )
if( setsockopt(s, SOL_SOCKET, SO_REUSEPORT, &one, sizeof(one)) )
if( !d_additional_socket )
g_localaddresses.push_back(locala);
- if(::bind(s, (sockaddr*)&locala, sizeof(locala))<0) {
+ if(::bind(s, (sockaddr*)&locala, locala.getSocklen())<0) {
close(s);
if( errno == EADDRNOTAVAIL && ! ::arg().mustDo("local-ipv6-nonexist-fail") ) {
g_log<<Logger::Error<<"IPv6 Address " << localname << " does not exist on this server - skipping UDP bind" << endl;