Skip to content

CheckPort Library

Two exported functions that test whether a TCP or UDP port on a host is in use.

Published Jul 2, 1995

A tiny reusable library for port probing. CheckPortUDP tries to bind() a datagram socket to the target address and port - if the bind fails, something else already owns it. CheckPortTCP instead attempts connect() and reports success when a listener answers. Both are __declspec(dllexport) so any C/C++ program can link them, and the included console driver shows the one-line call pattern. Use it for pre-flight checks before starting your own listeners, or for simple reachability probes.

#include <winsock.h>

//////////////////////////////////////////////////////////////////////

__declspec(dllexport) int CheckPortUDP(char *nAddress, short int nPort)
{
    struct sockaddr_in nSockServer;
    WSADATA wsaData;
    int lBusy = 0;
    int nSocket;
    if( WSAStartup( 0x0101, &wsaData ) == 0 )
    {
        nSockServer.sin_family      = AF_INET;
        nSockServer.sin_port        = htons( nPort );
        nSockServer.sin_addr.s_addr = inet_addr( nAddress );
        nSocket = socket( AF_INET, SOCK_DGRAM, 0 );
        lBusy = ( bind( nSocket, (SOCKADDR FAR *) &nSockServer,
                            sizeof( SOCKADDR_IN ) ) == SOCKET_ERROR );
        if( lBusy )
            closesocket( nSocket );
        WSACleanup();
    }
    return( lBusy );
}

//////////////////////////////////////////////////////////////////////

__declspec(dllexport) int CheckPortTCP(char *nAddress, short int nPort)
{
    struct sockaddr_in nSockServer;
    WSADATA wsaData;
    int lBusy = 0;
    int nSocket;
    if( WSAStartup( 0x0101, &wsaData ) == 0 )
    {
        nSockServer.sin_family      = AF_INET;
        nSockServer.sin_port        = htons( nPort );
        nSockServer.sin_addr.s_addr = inet_addr( nAddress );
        nSocket = socket( AF_INET, SOCK_STREAM, 0 );
        lBusy = ( connect( nSocket, (struct sockaddr *) &nSockServer,
                     sizeof( nSockServer ) ) == 0 );
        if( lBusy )
            closesocket( nSocket );
        WSACleanup();
    }
    return( lBusy );
}

//////////////////////////////////////////////////////////////////////
#include <windows.h>
#include <stdio.h>
#include <stdlib.h>

int CheckPortUDP(char *, short int);
int CheckPortTCP(char *, short int);


int main()
{
    if(CheckPortTCP("127.0.0.1",80))
        printf("Http Port In Use.");
    else
        printf("Http Port NOT In Use.");

    return 0;
}
An unhandled error has occurred. Reload 🗙