RawSocketでパケット送信実験中

msdn-WSASendを参考に、生パケットを送るコードを書いてみる

bool RawSocket::Write(byte* buff, dword size, dword* writeSize)
{
    unsigned long length;
    unsigned long flags = 0;
    WSABUF wsb;
    wsb.buf = (PTCHAR)buff;
    wsb.len = size;

    if (SOCKET_ERROR == WSASend(this->socket, &wsb, 1, &length, flags, NULL, NULL))
    {
        TRACE("SEND ERROR \n");
        return false;
    }

    *writeSize = length;
    return true;
}


これを実行すると、WSAGetLastError()で「WSAENOTCONN」が返ってくる。
Error Codeによれば、

Socket is not connected.
A request to send or receive data was disallowed because the socket is not connected and (when sending on a datagram socket using sendto) no address was supplied. Any other type of operation might also return this error―for example, setsockopt setting SO_KEEPALIVE if the connection has been reset.

とのこと。
つまりコネクトしてないよと。


これは

  • 素直に実は事前にConnectする必要あり(でもIPヘッダにコネクト先があるのに事前にコネクトって変だ)
  • 呼出し手順が違う

のどちらだろうか。

まだ途中rawsocket-20051124.zip


調べるとしたらhttp://search.microsoft.com/search/results.aspx?view=msdn&st=b&na=82&qu=sock_raw&s=1&swc=4http://search.microsoft.com/search/results.aspx?view=msdn&st=b&na=82&qu=sock_raw&s=1&swc=4あたりかなぁ。
送信となると資料が激減するのが痛いですな。


情報求む。