ааа, всем спасибо, все, разобрался.
В первом случае и правда не инициализировал nLen(неприятно то, что в Builder-ре работало и без инициализации, там nLen, имел выходное значение
The Windows Sockets getsockname function gets the local name for a socket.
int getsockname (
SOCKET s,
struct sockaddr FAR* name,
int FAR* namelen
);
Parameters
s[in] A descriptor identifying a bound socket.
name [out] Receives the address (name) of the socket.
namelen[out] The size of the name buffer.
), а во-втором у меня правда hWnd некорректный был.
Тогда вопрос в догонку.
Когда клиентское приложение закрывают крестом. Как правильно закрыть соединение? Я думаю что вызвать на клиенте подряд shutdown, closesocket и потом DestroyWindow(связанный с сокетом), не совсем корректно.