RE:и снова RAW SOCKETS
- From
- Kirill Neznamov (2:5025/32.88)
- To
- Gennady Porev
- Date
- 2002-11-07T23:58:02Z
- Area
- SU.WINDOWS.NT.PROG
Am 07 Nov 02 16:40:00 schrieb Gennady Porev an Kirill Neznamov zum Thema
<Ё б-Rў RAW SOCKETS>
KN> sizeof(i) у тебя будет = 1 так как i у тебя байт.
KN> в msdn сказано что IP_HDRINCL это BOOL.Поэтому:
KN> SetSockOpt(S,IPPROTO_IP,IP_HDRINCL,@i,4);
GP>
GP> Да что ты говоришь???? 8-))))) Тогда обьясни, мне, пожалуйста вот что.
GP> Во-первых, чем отличается байт и интежер при положении этого параметра
GP> на стэк для вызова SetSockOpt,
Стэк здесь не причем - важен последний параметр. sizeof(байт) = 1.
sizeof(int) = 4. У меня была такая проблема именно в этом месте:
int on=1;
setsockopt(sock,IPPROTO_IP,IP_HDRINCL,&on, 4);
Если вместо 4 было 1 то возвращалась какая-то ошибка. Компилятор был watcom.
Мои предположения почему возникает:
Смотрим в wtypes.h - typedef long BOOL; // BOOL - 4 байта
читаем описание setsockopt():
int setsockopt (
SOCKET s,
int level,
int optname,
const char FAR * optval,
int optlen
);
optval - A pointer to the buffer in which the value for the requested option is supplied.
optlen - The size of the optval buffer.
В случае BOOL у тебя буффер = 4 байта. Если вместо 4 ты указал 1 то байт
с установленным битом терялся.
GP> а во-вторых, почему тогда функция
GP> SetSockOpt не возвращает здесь значение <>0, если это ошибка?
Ну тогда ошибка не здесь :)
P.S. Ну до дяди мне еще далеко :)
WBR,
KiR
--- F.I.P.S./32 v1.0r W95/NT [M]
* Origin: Придумай его сам. (2:5025/32.88)