Show
Ignore:
Timestamp:
04/10/06 17:53:19 (7 years ago)
Author:
ahu
Message:

Try to prevent the 'Oops, sent partial answer' error, and made it more informative in case it does happen

Files:
1 modified

Legend:

Unmodified
Added
Removed
  • trunk/pdns/pdns/pdns_recursor.cc

    r672 r673  
    186186} 
    187187 
    188 void setReceiveBuffer(int fd, uint32_t size) 
     188void setBuffer(int fd, int optname, uint32_t size) 
    189189{ 
    190190  uint32_t psize=0; 
    191191  socklen_t len=sizeof(psize); 
    192192   
    193   if(!getsockopt(fd, SOL_SOCKET, SO_RCVBUF, (char*)&psize, &len) && psize > size) { 
     193  if(!getsockopt(fd, SOL_SOCKET, optname, (char*)&psize, &len) && psize > size) { 
    194194    L<<Logger::Error<<"Not decreasing socket buffer size from "<<psize<<" to "<<size<<endl; 
    195195    return;  
    196196  } 
    197197 
    198   if (setsockopt(fd, SOL_SOCKET, SO_RCVBUF, (char*)&size, sizeof(size)) < 0 ) 
     198  if (setsockopt(fd, SOL_SOCKET, optname, (char*)&size, sizeof(size)) < 0 ) 
    199199    L<<Logger::Error<<"Warning: unable to raise socket buffer size to "<<size<<": "<<strerror(errno)<<endl; 
    200200} 
    201201 
     202 
     203static void setReceiveBuffer(int fd, uint32_t size) 
     204{ 
     205  setBuffer(fd, SO_RCVBUF, size); 
     206} 
     207 
     208static void setSendBuffer(int fd, uint32_t size) 
     209{ 
     210  setBuffer(fd, SO_SNDBUF, size); 
     211} 
    202212 
    203213static void writePid(void) 
     
    346356        L<<Logger::Error<<"Error writing TCP answer to "<<dc->getRemote()<<": "<< (ret ? strerror(errno) : "EOF") <<endl; 
    347357      else if((unsigned int)ret != 2 + packet.size()) 
    348         L<<Logger::Error<<"Oops, partial answer sent to "<<dc->getRemote()<<" - probably would have trouble receiving our answer anyhow (size="<<packet.size()<<")"<<endl; 
     358        L<<Logger::Error<<"Oops, partial answer sent to "<<dc->getRemote()<<" for "<<dc->d_mdp.d_qname<<" (size="<< (2 + packet.size()) <<", sent "<<ret<<")"<<endl; 
    349359    } 
    350360 
     
    466476     
    467477    Utility::setNonBlocking(fd); 
     478    setSendBuffer(fd, 65000); 
    468479    listen(fd, 128); 
    469480    s_tcpserversocks.push_back(fd); 
     
    939950            } 
    940951            catch(MOADNSException& mde) { 
    941               L<<Logger::Error<<"Unable to parse packet from remote udp client "<< sockAddrToString((struct sockaddr_in*) &fromaddr, addrlen) <<": "<<mde.what()<<endl; 
     952              L<<Logger::Error<<"Unable to parse packet from remote UDP client "<< sockAddrToString((struct sockaddr_in*) &fromaddr, addrlen) <<": "<<mde.what()<<endl; 
    942953            } 
    943954          }