示例#1
0
sockbuf::sockdesc sockbuf::accept ()
{
    int soc = -1;
    if ((int)(soc = ::accept (rep->sock, 0, 0)) == -1)
        throw sockerr (errno, "sockbuf::sockdesc", sockname.text.c_str());
    return sockdesc (soc);
}
示例#2
0
sockbuf::sockdesc sockbuf::accept (sockAddr& sa)
{
    socklen_t len = sa.size ();
    int soc = -1;
    if ((int)(soc = ::accept (rep->sock, sa.addr (),
                              &len)) == -1)
        throw sockerr (errno, "sockbuf::sockdesc", sockname.text.c_str());
    return sockdesc (soc);
}
示例#3
0
void RawSocket::AsyncConnect()
{
	int flags;
	int sock = socket((address.ss_family == AF_INET6) ? AF_INET6 : AF_INET, SOCK_STREAM, 0);
	if (sock < 0) throw IOException::MakeException("Failed to initialize socket", errno);

	Descriptor sockdesc(sock);
	if(flags = fcntl(sock, F_GETFL, NULL) < 0) throw IOException::MakeException("Failed to get socket flags", errno);
	if(fcntl(sock, F_SETFL, flags | O_NONBLOCK) < 0) throw IOException::MakeException("Failed to set socket nonblocking", errno);
	int connectstate = connect(sock, (sockaddr *) &address, (address.ss_family == AF_INET) ? sizeof(sockaddr_in) : sizeof(sockaddr_in6));
	if (connectstate < 0 && errno != EINPROGRESS) throw IOException::MakeException("Failed to connect socket", errno);

	SetReadDescriptor(sockdesc);
	SetWriteDescriptor(sockdesc);
}