不会出错,如果不先Open,会提示Socket句柄无效,完整的测试代码如下:
procedure TForm1.TestBind;
var
SockAddrIn: TSockAddrIn;
begin
ClientSocket1.Open;
SockAddrIn.sin_family:=AF_INET;
SockAddrIn.sin_addr.S_addr:=0;
SockAddrIn.sin_port:=htons(1979);
if bind(ClientSocket1.Socket.SocketHandle,SockAddrIn,sizeof(TSockAddrIn))=0 then
ShowMessage('绑定成功!')
else
case GetLastError() of
WSANOTINITIALISED:
ShowMessage('在使用此API之前应首先成功地调用WSAStartup()。');
WSAENETDOWN:
ShowMessage('WINDOWS套接口实现检测到网络子系统失效。');
WSAEADDRINUSE:
ShowMessage('所定端口已在使用中(参见setoption()中的SO_REUSEADDR选项)。');
WSAEFAULT:
ShowMessage('namelen参数太小(小于sockaddr结构的大小)。');
WSAEINPROGRESS:
ShowMessage('一个阻塞的WINDOWS套接口调用正在运行中。');
WSAEAFNOSUPPORT:
ShowMessage('本协议不支持所指定的地址族。');
WSAEINVAL:
ShowMessage('该套接口已与一个地址捆绑。');
WSAENOBUFS:
ShowMessage('无足够可用缓冲区,连接过多。');
WSAENOTSOCK:
ShowMessage('描述字');
end;
end;