Суть проблемы: программа слушает трафик,что-то вроде сниффера, так вот функция ioctlsocket() выдает ошибку 10042:Bad protocol option.
А так как опыта работы с винсокетами у меня практически нет, то не могу понять в чем проблема.
Ниже привожу текст программы.
Код: Выделить всё
Global Data
include('Winsock.inc')
sock SOCKET
Prmod ULONG
sopt ULONG
code
err#=WSACleanUP()
clear(PWSAData)
if WSAStartup(s32_Version2_0,address(PWSAData))<>0
Message('Error wsastartup:'&WSAGetLastError())
end
Sock=Createsocket(AF_INET,SOCK_STREAM,IPPROTO_IP)
IF Sock < 0
Message('Error createsocket - '&WSAGetLastError())
ELSE
sopt=True
if setsockopt(Sock,SOL_SOCKET,SO_REUSEADDR,address(sopt),size(sopt))<>0
Message('Setsockopt error - '&WSAGetLastError())
else
s_in.sin_family = AF_INET
s_in.sin_addr.s_addr = INADDR_ANY
end
END
if BindSocket(Sock,address(s_in),Size(s_in))= SOCKET_ERROR Message('Error bindsocket - '&WSAGetLastError())
CloseSocket(Sock)
end
PrMod=1
if ioctlsocket(Sock,SIO_RCVALL,PrMod) <> 0
Message('Error - '&WSAGetLastError()) ! здесь выдет ошибку 10042
CloseSocket(Sock)
err#=WSACleanUP()
end
!здесь буду принимать данные
!
CloseSocket(Sock)
err#=WSACleanUP()
!!!!!!!!!!!!!!!!!!!!!!!!
файл winsock.inc
OMIT('_EndOfInclude_',_WINSOCK_)
_WINSOCK_ EQUATE(1)
INCLUDE('WINDOWS.INC'),ONCE
WSAData GROUP,TYPE
wVersion SHORT
wHighVersion SHORT
szDescription CSTRING(WSADESCRIPTION_LEN + 1)
szSystemStatus CSTRING(WSASYS_STATUS_LEN + 1)
iMaxSockets UNSIGNED
iMaxUdpDg UNSIGNED
lpVendorInfo LONG
END
PWSAData LIKE(WSAData)
in_addr GROUP,TYPE
s_b1 BYTE
s_b2 BYTE
s_b3 BYTE
s_b4 BYTE
S_addr LONG
END
SOCKADDR_IN GROUP,TYPE
sin_family SHORT
sin_port USHORT
!sin_addr LIKE(in_addr),pre(sin)
sin_addr LIKE(in_addr)
sin_zero STRING(8)
END
s_in LIKE(SOCKADDR_IN)
SOCKET_ERROR EQUATE(-1)
s32_Version2_0 EQUATE(1000000010b)
INADDR_ANY EQUATE(0)
SIO_RCVALL EQUATE(98000001h)
SOCKET EQUATE(LONG)
SOCK_STREAM EQUATE(1)
IPPROTO_IP EQUATE(0)
AF_INET EQUATE(2)
SOL_SOCKET EQUATE(0ffffh)
SO_REUSEADDR EQUATE(04h)
MAP
MODULE('WinApi')
WSAStartup PROCEDURE(SHORT wVersionRequested, LONG lpWSAData),SIGNED,PASCAL
WSACleanup PROCEDURE(),SIGNED,PASCAL
WSAGetLastError PROCEDURE(),SIGNED,PASCAL,NAME('WSAGetLastError')
CreateSocket PROCEDURE(SIGNED af, SIGNED type, SIGNED protocol),SOCKET,PASCAL,NAME('socket')
CloseSocket PROCEDURE(SOCKET s),SIGNED,PROC,PASCAL,NAME('closesocket')
ReceiveData PROCEDURE(SOCKET s, LONG lpstrBuffer, SIGNED dwLen, SIGNED flags),SIGNED,PASCAL,NAME('recv')
BindSocket PROCEDURE(SOCKET s, LONG lpname, SIGNED namelen),SIGNED,RAW,PASCAL,NAME('bind')
Listen PROCEDURE(SOCKET s, SIGNED backlog),SIGNED,PASCAL,NAME('listen')
setsockopt PROCEDURE(SOCKET s, SIGNED level, SIGNED optname, LONG lpszOptVal, SIGNED optlen),SIGNED,PASCAL
Ioctlsocket PROCEDURE(SOCKET s,LONG,*ULONG),SHORT,RAW,PASCAL,NAME('IOCTLSOCKET')
END
end
_EndOfInclude_
Заранее благодарна,
Анна.