WinSock Recvfrom() sekarang kembali WSAECONNRESET bukan dari menghalangi atau waktu keluar

Terjemahan Artikel Terjemahan Artikel
ID Artikel: 263823 - Melihat produk di mana artikel ini berlaku.
Perbesar semua | Perkecil semua

GEJALA

Pada Windows 2000, program User Datagram protokol (UDP) mungkin tidak bekerja dan dapat menghasilkan respons WSAECONNRESET.

PENYEBAB

Jika mengirim datagram menggunakan KirimKe fungsi menghasilkan respons "ICMP pelabuhan terjangkau" dan Pilih fungsi yang ditetapkan untuk readfds, program kembali 1 dan panggilan berikutnya untuk recvfrom fungsi tidak bekerja dengan kesalahan WSAECONNRESET (10054) respon. Di Microsoft Windows NT 4.0, situasi ini menyebabkan Pilih fungsi blok atau waktu.

PEMECAHAN MASALAH

Untuk memecahkan masalah ini, Dapatkan paket layanan terbaru untuk Windows 2000. Untuk informasi selengkapnya, klik nomor artikel berikut untuk melihat artikel di Pangkalan Pengetahuan Microsoft:
260910 Cara mendapatkan paket layanan terbaru Windows 2000
Soket baru telah IOCTL disebut "SIO_UDP_CONNRESET" diperkenalkan pada Windows 2000. Ketika IOCTL ini digunakan, program harus ditulis ulang khusus untuk Windows 2000 untuk mendapatkan asli Windows NT 4.0 perilaku. Windows NT 4.0, Microsoft Windows 95 dan Microsoft Windows 98 telah tidak ada dukungan untuk IOCTL baru ini. Selain untuk menulis ulang aplikasi Anda, Anda perlu perbaikan terbaru yang direferensikan lebih bawah dalam artikel ini.

The kode snippet berikut menunjukkan teknik yang dapat digunakan untuk memanggil WSAIoctl dengan kode kontrol SIO_UDP_CONNRESET untuk mendapatkan Windows asli NT 4.0 perilaku.
DWORDdwBytesReturned = 0;
BOOLbNewBehavior = FALSE;
DWORDstatus;

// disable  new behavior using
// IOCTL: SIO_UDP_CONNRESET
status = WSAIoctl(sd, SIO_UDP_CONNRESET,
&bNewBehavior, sizeof(bNewBehavior),
                   NULL, 0, &dwBytesReturned,
                   NULL, NULL);

if (SOCKET_ERROR == status)
{
DWORD dwErr = WSAGetLastError();
if (WSAEWOULDBLOCK == dwErr)
{
// nothing to do
return(FALSE);
}
else
{
printf("WSAIoctl(SIO_UDP_CONNRESET) Error: %d\n", dwErr);
return(FALSE);
}
}
				
Untuk dapat mengkompilasi kode ini, Anda perlu baik untuk memiliki terbaru Mswsock.h yang mencakup definisi dari SIO_UDP_CONNRESET atau untuk menyisipkan di bawah definisi itu langsung ke kode Anda.
// MS Transport Provider IOCTL to control
// reporting PORT_UNREACHABLE messages
// on UDP sockets via recv/WSARecv/etc.
// Path TRUE in input buffer to enable (default if supported),
// FALSE to disable.
#defineSIO_UDP_CONNRESET_WSAIOW(IOC_VENDOR,12)
				
Catatan Perbaikan terbaru yang dijelaskan dalam artikel ini tidak akan memecahkan masalah kecuali program ulang dengan pemakaian SIO_UDP_CONNRESET baru IOCTL.

Untuk mengkompilasi kode ini, perlu memiliki terbaru Platform SDK diinstal pada komputer Anda. Hal ini tersedia dari situs Website MSDN berikut:
http://MSDN.Microsoft.com

STATUS

Microsoft telah mengkonfirmasi bahwa ini merupakan masalah di dalam produk Microsoft sebagaimana didaftar pada awal artikel ini. Masalah ini pertama kali dikoreksi pada Windows 2000 Service Paket 2.

INFORMASI LEBIH LANJUT

Untuk informasi lebih lanjut tentang cara menginstal Windows 2000 dan Windows perbaikan terbaru 2000 bersamaan dengan itu, klik nomor artikel di bawah ini untuk melihat artikel di dalam Basis Pengetahuan Microsoft:
249149Menginstal perbaikan terbaru Microsoft Windows 2000 dan Windows 2000

Properti

ID Artikel: 263823 - Kajian Terakhir: 22 September 2011 - Revisi: 2.0
Berlaku bagi:
  • Microsoft Windows 2000 Server
  • Microsoft Windows 2000 Advanced Server
  • Microsoft Windows 2000 Professional Edition
Kata kunci: 
kbhotfixserver kbqfe kbbug kbfix kbwin2000presp2fix kbmt KB263823 KbMtid
Penerjemahan Mesin
PENTING: Artikel ini diterjemahkan menggunakan perangkat lunak mesin penerjemah Microsoft dan bukan oleh seorang penerjemah. Microsoft menawarkan artikel yang diterjemahkan oleh seorang penerjemah maupun artikel yang diterjemahkan menggunakan mesin sehingga Anda akan memiliki akses ke seluruh artikel baru yang diterbitkan di Pangkalan Pengetahuan (Knowledge Base) dalam bahasa yang Anda gunakan. Namun, artikel yang diterjemahkan menggunakan mesin tidak selalu sempurna. Artikel tersebut mungkin memiliki kesalahan kosa kata, sintaksis, atau tata bahasa, hampir sama seperti orang asing yang berbicara dalam bahasa Anda. Microsoft tidak bertanggung jawab terhadap akurasi, kesalahan atau kerusakan yang disebabkan karena kesalahan penerjemahan konten atau penggunaannya oleh para pelanggan. Microsoft juga sering memperbarui perangkat lunak mesin penerjemah.
Klik disini untuk melihat versi Inggris dari artikel ini:263823

Berikan Masukan

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com