私はアセンブリを学んでおり、教育的な手段で簡単な WinSock アプリを作成しようとしています。ほとんどすべて正常に動作しますが、再接続しようとすると問題が発生します。
start:
invoke WSAStartup,200,wsadata
invoke socket,AF_INET,SOCK_STREAM,0
mov [hSock],eax
invoke htons, PORTCONST
mov [sadr.sin_port], ax
mov [sadr.sin_family], AF_INET
invoke inet_addr, IP
mov [sadr.sin_addr], eax
Connectl:
invoke connect,[hSock], sadr, 16
cmp eax, 0
je Recievel
invoke Sleep, 1000
jmp Connectl
Recievel:
invoke recv, [hSock], spacket, 131, 0
cmp eax, 0
jng Clsl
{Some non-related code}
jmp Recievel
Clsl:
mov [spacket.command],0
invoke CloseSocket, [hSock]
invoke WSACleanUp
invoke Sleep, 4000
jmp start
サーバーアプリが実行されていないときにこのクライアントを実行すると、すべて問題ありませんが、実行中に同じことを実行するか、サーバーアプリを閉じて再度実行すると、静かな奇妙な問題が発生します。何度も再接続し始めます。ある時点で「成功」しますが、サーバーアプリからクライアントに、またはその逆に何も送信できません。