Beispiel #1
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);
}
Beispiel #2
0
int sockbuf::recvfrom (sockAddr& sa, void* buf, int len, int msgf)
{
    if (rep->rtmo != -1 && is_readready (rep->rtmo)==0)
        throw sockerr (ETIMEDOUT, "sockbuf::recvfrom", sockname.text.c_str());

    if (rep->oob && atmark ())
        throw sockoob ();

    int rval = 0;
    socklen_t __sa_len = sa.size ();

    if ((rval = ::recvfrom (rep->sock, (char*) buf, len,
                            msgf, sa.addr (), &__sa_len)) == -1)
        throw sockerr (errno, "sockbuf::recvfrom", sockname.text.c_str());
    return rval;
}
Beispiel #3
0
int sockbuf::sendto (sockAddr& sa, const void* buf, int len, int msgf)
// upon error, write throws the number of bytes writen so far instead
// of sockerr.
{
    if (rep->stmo != -1 && is_writeready (rep->stmo)==0)
        throw sockerr (ETIMEDOUT, "sockbuf::sendto", sockname.text.c_str());

    int wlen=0;
    while(len>0) {
        int wval = ::sendto (rep->sock, (char*) buf, len, msgf,
                             sa.addr (), sa.size());
        if (wval == -1) throw wlen;
        len -= wval;
        wlen += wval;
    }
    return wlen;
}
Beispiel #4
0
void sockbuf::connect (sockAddr& sa)
{
    if (::connect(rep->sock, sa.addr (), sa.size()) == -1)
        throw sockerr (errno, "sockbuf::connect", sockname.text.c_str());
}
Beispiel #5
0
void sockbuf::bind (sockAddr& sa)
{
  if (::bind (rep->sock, sa.addr (), sa.size ()) == -1)
    throw sockerr (errno, "sockbuf::bind", sockname.c_str());
}