Changeset 1862 for zzuf


Ignore:
Timestamp:
Nov 3, 2007, 12:23:25 AM (12 years ago)
Author:
Sam Hocevar
Message:
  • Divert connect() so that -p/--ports now works with outbound connections.
File:
1 edited

Legend:

Unmodified
Added
Removed
  • zzuf/trunk/src/lib-fd.c

    r1859 r1862  
    8888#if defined HAVE_BIND
    8989static int     (*ORIG(bind))    (int sockfd, const struct sockaddr *my_addr,
     90                                 SOCKLEN_T addrlen);
     91#endif
     92#if defined HAVE_CONNECT
     93static int     (*ORIG(connect)) (int sockfd, const struct sockaddr *serv_addr,
    9094                                 SOCKLEN_T addrlen);
    9195#endif
     
    231235#endif
    232236
     237#if defined HAVE_CONNECT
     238int NEW(connect)(int sockfd, const struct sockaddr *serv_addr,
     239                 SOCKLEN_T addrlen)
     240{
     241    int ret;
     242
     243    LOADSYM(connect);
     244    ret = ORIG(connect)(sockfd, serv_addr, addrlen);
     245    if(!_zz_ready || _zz_islocked(-1) || !_zz_network)
     246        return ret;
     247
     248    if(ret >= 0)
     249    {
     250        const struct sockaddr_in* in = (const struct sockaddr_in *)serv_addr;
     251        long int port;
     252
     253        switch(serv_addr->sa_family)
     254        {
     255        case AF_INET:
     256#if defined AF_INET6
     257        case AF_INET6:
     258#endif
     259        case AF_UNSPEC:
     260            port = ntohs(in->sin_port);
     261            if(!_zz_portwatched(port))
     262            {
     263                _zz_unregister(sockfd);
     264                return ret;
     265            }
     266            break;
     267        default:
     268            break;
     269        }
     270
     271        debug("%s(%i, %p, %i) = %i", __func__,
     272              sockfd, serv_addr, (int)addrlen, ret);
     273    }
     274
     275    return ret;
     276}
     277#endif
     278
    233279#if defined HAVE_SOCKET
    234280int NEW(socket)(int domain, int type, int protocol)
Note: See TracChangeset for help on using the changeset viewer.