ret=arecvfrom(reinterpret_cast<char *>(d_buf), d_bufsize-1,0,(struct sockaddr*)(&toaddr), &addrlen, &d_len, p.d.id);
}
else {
+ // cerr<<"do tcp"<<endl;
Socket s(InterNetwork, Stream);
IPEndpoint ie(ip, 53);
s.setNonBlocking();
s.connect(ie);
- int len=htons(p.len);
+ unsigned int len=htons(p.len);
char *lenP=(char*)&len;
const char *msgP=p.getData();
string packet=string(lenP, lenP+2)+string(msgP, msgP+p.len);
// cerr<<"arecvtcp: timeout"<<endl;
return 0;
}
-
+ if(len > d_bufsize) {
+ d_bufsize=len;
+ delete[] d_buf;
+ d_buf = new unsigned char[d_bufsize];
+ }
memcpy(d_buf, packet.c_str(), len);
d_len=len;
ret=1;
const char *buffer=R->getData();
if(!R->d_tcp) {
- if(R->len > 512)
+ if(R->len > 512) {
R->truncate(512);
+ }
sendto(R->getSocket(),buffer,R->len,0,(struct sockaddr *)(R->remote),R->d_socklen);
}