Socket(int af, int st, ProtocolType pt=0)
{
if((d_socket=socket(af, st, pt))<0)
- throw NetworkError(strerror(errno));
+ throw NetworkError(stringerror());
setCloseOnExec(d_socket);
}
if(errno==EAGAIN)
return nullptr;
- throw NetworkError("Accepting a connection: "+string(strerror(errno)));
+ throw NetworkError("Accepting a connection: "+stringerror());
}
return std::unique_ptr<Socket>(new Socket(s));
{
int tmp=1;
if(reuseaddr && setsockopt(d_socket, SOL_SOCKET, SO_REUSEADDR, reinterpret_cast<char*>(&tmp), sizeof tmp)<0)
- throw NetworkError(string("Setsockopt failed: ")+strerror(errno));
+ throw NetworkError("Setsockopt failed: "+stringerror());
if(::bind(d_socket, reinterpret_cast<const struct sockaddr *>(&local), local.getSocklen())<0)
- throw NetworkError("While binding: "+string(strerror(errno)));
+ throw NetworkError("While binding: "+stringerror());
}
//! Connect the socket to a specified endpoint
ssize_t bytes;
d_buffer.resize(s_buflen);
if((bytes=recvfrom(d_socket, &d_buffer[0], s_buflen, 0, reinterpret_cast<sockaddr *>(&ep) , &remlen)) <0)
- throw NetworkError("After recvfrom: "+string(strerror(errno)));
+ throw NetworkError("After recvfrom: "+stringerror());
dgram.assign(d_buffer, 0, static_cast<size_t>(bytes));
}
d_buffer.resize(s_buflen);
if((bytes=recvfrom(d_socket, &d_buffer[0], s_buflen, 0, reinterpret_cast<sockaddr *>(&remote), &remlen))<0) {
if(errno!=EAGAIN) {
- throw NetworkError("After async recvfrom: "+string(strerror(errno)));
+ throw NetworkError("After async recvfrom: "+stringerror());
}
else {
return false;
void sendTo(const char* msg, size_t len, const ComboAddress &ep)
{
if(sendto(d_socket, msg, len, 0, reinterpret_cast<const sockaddr *>(&ep), ep.getSocklen())<0)
- throw NetworkError("After sendto: "+string(strerror(errno)));
+ throw NetworkError("After sendto: "+stringerror());
}
//! For connected datagram sockets, send a datagram
void send(const std::string& msg)
{
if(::send(d_socket, msg.c_str(), msg.size(), 0)<0)
- throw NetworkError("After send: "+string(strerror(errno)));
+ throw NetworkError("After send: "+stringerror());
}
do {
res=::send(d_socket, ptr, toWrite, 0);
if(res<0)
- throw NetworkError("Writing to a socket: "+string(strerror(errno)));
+ throw NetworkError("Writing to a socket: "+stringerror());
if(!res)
throw NetworkError("EOF on socket");
toWrite -= static_cast<size_t>(res);
if(errno==EAGAIN)
return 0;
- throw NetworkError("Writing to a socket: "+string(strerror(errno)));
+ throw NetworkError("Writing to a socket: "+stringerror());
}
//! Writes toWrite bytes from ptr to the socket
ssize_t res;
res=::send(d_socket,ptr,toWrite,0);
if(res<0) {
- throw NetworkError("Writing to a socket: "+string(strerror(errno)));
+ throw NetworkError("Writing to a socket: "+stringerror());
}
return res;
}
d_buffer.resize(s_buflen);
ssize_t res=::recv(d_socket, &d_buffer[0], s_buflen, 0);
if(res<0)
- throw NetworkError("Reading from a socket: "+string(strerror(errno)));
+ throw NetworkError("Reading from a socket: "+stringerror());
data.assign(d_buffer, 0, static_cast<size_t>(res));
}
{
ssize_t res=::recv(d_socket, buffer, bytes, 0);
if(res<0)
- throw NetworkError("Reading from a socket: "+string(strerror(errno)));
+ throw NetworkError("Reading from a socket: "+stringerror());
return static_cast<size_t>(res);
}
if(err == 0)
throw NetworkError("timeout reading");
if(err < 0)
- throw NetworkError("nonblocking read failed: "+string(strerror(errno)));
+ throw NetworkError("nonblocking read failed: "+stringerror());
return read(buffer, n);
}
void listen(unsigned int length=10)
{
if(::listen(d_socket,length)<0)
- throw NetworkError("Setting socket to listen: "+string(strerror(errno)));
+ throw NetworkError("Setting socket to listen: "+stringerror());
}
//! Returns the internal file descriptor of the socket