为什么recv老是报错???(100分)

  • 主题发起人 主题发起人 fl_xyg
  • 开始时间 开始时间
F

fl_xyg

Unregistered / Unconfirmed
GUEST, unregistred user!
下面是我写的函数其他操作都成功了就是ret:= recv(sock.. 总是返回-1不知到怎么会事请高手指教,谢谢!
function createsocket: boolean;
var
sock: tsocket;
GInitData : TWSADATA;
IP_HDRINCL,nameLen: integer;
flag:integer;
addr_in: ^TSockAddrIn;//^SOCKADDR_IN;
phe : PHostEnt;
Buffer : array [0..63] of char;
dwvalue: u_long;//dword;
SIO_RCVALL:dword;
int_value,ret: integer;
buf1: array [0..1023] of char;
size:Integer;
begin
dwvalue := 1;
SIO_RCVALL := 2550136833;
flag := 1;
WSAStartup($101, GInitData);
GetHostName(Buffer, SizeOf(Buffer));
phe :=GetHostByName(buffer);
sock := socket(AF_INET, SOCK_RAW, IPPROTO_RAW);
int_value := setsockopt(sock, IPPROTO_IP, IP_HDRINCL{2}, @flag, sizeof(flag));
addr_in :=AllocMem(sizeOf(TSockAddr));
addr_in.sin_addr.S_addr := longint(plongint(Phe^.h_addr_list^)^);
addr_in.sin_family := AF_INET;
addr_in.sin_port := htons(57274);
nameLen:=sizeof(TSockAddr);
int_value := bind(sock, addr_in^, nameLen);
int_value := ioctlsocket(sock, SIO_RCVALL, dwvalue);
while true do
begin
ret := recv(sock,buf1,sizeof(buf1),0);
end;
 
用多线程
 
后退
顶部