Exemple #1
0
/** NOTE: both IP address and port are in host byte order */
STATIC File * SocketOpen2(IPaddr addr, Port port)
{
    Socket sock = INVALID_SOCKET;
    if (SOCKET_GetTcp(0,&sock)) {
        if (SOCKET_Connect(sock, addr, port)) {
            SocketFile * s = MEM_New(SocketFile);
            if (s) {
                Bool ok;
                StrBuf32 nameBuf;
                STRBUF_InitBufXXX(&nameBuf);
                STRBUF_Format(&nameBuf.sb, TEXT(IPADDR_FORMAT)TEXT_(":%hu"),
                    HOST_IPADDR_FORMAT_ARG(addr),port);

                memset(s, 0, sizeof(*s));
                ok = FILE_Init(&s->file, nameBuf.sb.s, False, &SocketIO);
                STRBUF_Destroy(&nameBuf.sb);

                if (ok) {
                    s->sock = sock;
                    s->eof = False;
                    return &s->file;
                }
            }            
            shutdown(sock, SHUT_RDWR);
        }
        closesocket(sock);
    }
    return NULL;
}
Exemple #2
0
/**
 * Connects to the specified IP address/port. 
 * Both port and IP address are in host byte order
 */
Bool SOCKET_Connect(Socket s, IPaddr ipaddr, Port port)
{
    int err;
    struct sockaddr_in sa;

    /* initialize sockaddr_in */
    memset(&sa, 0, sizeof(sa));
    sa.sin_family = AF_INET;
    sa.sin_port = htons(port);
    sa.sin_addr.s_addr = htonl(ipaddr);

    /* connect */
    err = connect(s,(struct sockaddr*)&sa,sizeof(sa));
    if (err) {
        Verbose(TEXT("ERROR: cannot connect to ") TEXT(IPADDR_FORMAT) 
                TEXT(":%hu\n"), HOST_IPADDR_FORMAT_ARG(ipaddr), port);   
        return False;
    } else {
        return True;
    }
}