На пример работающего забинденного сокета. Где ошибка у тебя - не разбирался. Если что где недовырезал или перевырезал просьба не пинать а стучаться в мыло.
WSADATA wsaData; struct sockaddr_in local, to, from; int fromlen, i, _i; SOCKET S; time_t T; byte buf[64000]; signed long Ready, Ready2; BOOL Broadcast = true; if (WSAStartup(0x202,&wsaData) != 0) { WSACleanup(); throw Exception("WinSock init failed."); } __try { S = socket(AF_INET, SOCK_DGRAM, IPPROTO_IP); if (S == INVALID_SOCKET) throw Exception("Can not create socket."); local.sin_family = AF_INET; local.sin_port = htons(5555); local.sin_addr.s_addr = htonl (INADDR_ANY); bind(S, (struct sockaddr*)&local, sizeof(local)); local.sin_addr.s_addr = htonl (INADDR_BROADCAST); setsockopt(S, SOL_SOCKET, SO_BROADCAST, (char *) &Broadcast, sizeof(Broadcast)); i = 1000; setsockopt (S, SOL_SOCKET, SO_RCVTIMEO, (char *)&i, sizeof(i)); i = 1000; setsockopt (S, SOL_SOCKET, SO_SNDTIMEO, (char *)&i, sizeof(i)); to.sin_family = AF_INET; to.sin_addr.s_addr = htonl (INADDR_BROADCAST); //INADDR_BROADCAST - 1; //inet_addr("255.255.255.255"); to.sin_port = htons(5002); sendto(S, String1, sizeof(String1), 0, (struct sockaddr FAR *)&to, sizeof(to)); T = time(NULL); do { fromlen = sizeof (from); Ready2 = recvfrom(S, buf, sizeof(buf), 0, (struct sockaddr*)&from, &fromlen); if (Ready2 != -1) { } } while (time(NULL) - T < 1); closesocket(S); } __finally { WSACleanup(); }