Το ping δεν σου κάνει σε αυτήν την περίπτωση γιατί μπορεί μεταξύ δύο διαδοχικών ping να έχει προλάβει κάποιος να συνδεθεί και να αποσυνδεθεί. Από εκεί και πέρα, δεν ξέρω κατά πόσο θέλεις να γεμίσεις το δίκτυο σου με ping, αν αποφασίσεις να μειώσεις τον χρόνο που θα κάνεις τα ping.
Μια καλύτερη μέθοδος είναι να χρησιμοποιήσεις όντως το WinSock. Αν επιχειρήσεις να κάνεις Listen πάνω σε ένα κατειλημμένο port θα πάρεις error. Κάνεις error handling λοιπόν και καταχωρείς το port ως κατειλημμένο.
Πάντως, το πρόβλημα είναι ότι το WinSock δεν σου παρέχει events για να πιαστείς και να "κάνεις πράγματα" όταν συμβεί κάτι, πχ συνδεθεί κάποιος σε ένα port σου, καθότι δεν έχει ένα transparency μηχανισμό για πιάσει το event και να αφήσει μετά να συνεχιστεί η διαδικασία που έχει ξεκινήσει ο client. Εναλλακτική λύση να παίξεις με WinAPI.
Αν κάνενα από τα παραπάνω δε σου κάνει, δες μήπως βάλεις ένα network monitoring πρόγραμμα να κάνει αυτή τη δουλειά για σένα, να καταγράφει το τι συμβαίνει στο δίκτυο και να τα ρίχνει στη βάση. Ένα τέτοιο είναι αυτό http://www.dirfile.com/activexperts_network_monitor.htm (Νομίζω ότι και το TCPView της Winternals κάνει το ίδιο πράγμα). Από εκεί και πέρα, μπορείς εσύ απλά να διαβάζεις τη βάση και να κάνεις ό,τι θες. Πάντως η λογική θα είναι περίπου ίδια με αυτή που σου περιέγραψε ο Γιώργος.
Vir prudens non contra ventum mingit