0

現在、DLL を挿入していくつかの機能を迂回することで、基本的なサーバー アプリケーションにいくつかの機能を追加しようとしていますが、2 つの呼び出しの間に保存された IP アドレスが破損するという問題があります。

まず、「受け入れ」を迂回していくつかの値を解析し、それらを接続クラスに入力してリストに追加します。

迂回機能を受け入れる:

std::list<Connection*> ConnectionsList;
SOCKET WINAPI MyAccept(SOCKET s, sockaddr *addr, int *addrlen)
{
    ...  
    ConnectionsList.push_back(new Connection(ClientSocket, ipstr));
    ...
}

接続クラス:

SOCKET s;
char * ipAddress;
char * playerName;
Connection::Connection(SOCKET sock, char * address)
{
    s = sock;
    ipAddress = address;
}

始める

また、接続のリストからソケットを削除したい「closesocket」を迂回しました。この関数にブレークポイントを設定すると、IP アドレスが壊れているように見えます。

終わり

なぜこれが起こっているのか誰にも分かりますか?

4

2 に答える 2

0

ConnectionListetc static/global 変数をロックで保護してみてください。

于 2013-07-12T15:52:29.167 に答える
0

ipAddress = address;ポインタをコピーするだけです。他の何かがそれが指すものを変更すると、問題が発生します。

これは C++ であるため、std::string.

std::string ipAdreess;
...
ipAddress = address;

それ以外の場合は、stdcpy十分な大きさのバッファーに入れます。

ところで、Connection*リストからすべてを削除するのは何ですか?

于 2013-07-10T14:43:01.243 に答える