fungsi ioctlsocket (winsock.h)
Fungsi ioctlsocket mengontrol mode I/O soket.
Sintaks
int ioctlsocket(
[in] SOCKET s,
[in] long cmd,
[in, out] u_long *argp
);
Parameter
[in] s
Deskriptor yang mengidentifikasi soket.
[in] cmd
Perintah untuk dilakukan pada soket. Lihat Winsock IOCTLs.
[in, out] argp
Pointer ke parameter untuk cmd.
Mengembalikan nilai
Setelah berhasil diselesaikan, ioctlsocket mengembalikan nol. Jika tidak, nilai SOCKET_ERROR dikembalikan, dan kode kesalahan tertentu dapat diambil dengan memanggil WSAGetLastError.
Kode kesalahan | Makna |
---|---|
Panggilan WSAStartup yang berhasil harus terjadi sebelum menggunakan fungsi ini. | |
Subsistem jaringan gagal. | |
Pemblokiran panggilan Windows Sockets 1.1 sedang berlangsung, atau penyedia layanan masih memproses fungsi panggilan balik. | |
Deskriptor bukan soket. | |
Parameter argp bukan bagian yang valid dari ruang alamat pengguna. |
Keterangan
Fungsi ioctlsocket dapat digunakan pada soket apa pun dalam status apa pun. Ini digunakan untuk mengatur atau mengambil beberapa parameter operasi yang terkait dengan soket, terlepas dari subsistem protokol dan komunikasi. Berikut adalah perintah yang didukung untuk digunakan dalam parameter cmd dan semantiknya:
Fungsi WSAIoctl digunakan untuk mengatur atau mengambil parameter operasi yang terkait dengan soket, protokol transportasi, atau subsistem komunikasi.
Fungsi WSAIoctl lebih kuat daripada fungsi ioctlsocket dan mendukung sejumlah besar nilai yang mungkin untuk diatur atau diambil parameter operasi.
Contoh Kode
Contoh berikut menunjukkan penggunaan fungsi ioctlsocket .
#include <winsock2.h>
#include <stdio.h>
#pragma comment(lib, "Ws2_32.lib")
void main()
{
//-------------------------
// Initialize Winsock
WSADATA wsaData;
int iResult;
u_long iMode = 0;
iResult = WSAStartup(MAKEWORD(2,2), &wsaData);
if (iResult != NO_ERROR)
printf("Error at WSAStartup()\n");
//-------------------------
// Create a SOCKET object.
SOCKET m_socket;
m_socket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
if (m_socket == INVALID_SOCKET) {
printf("Error at socket(): %ld\n", WSAGetLastError());
WSACleanup();
return;
}
//-------------------------
// Set the socket I/O mode: In this case FIONBIO
// enables or disables the blocking mode for the
// socket based on the numerical value of iMode.
// If iMode = 0, blocking is enabled;
// If iMode != 0, non-blocking mode is enabled.
iResult = ioctlsocket(m_socket, FIONBIO, &iMode);
if (iResult != NO_ERROR)
printf("ioctlsocket failed with error: %ld\n", iResult);
}
Kompatibilitas
Fungsi ioctlsocket ini hanya melakukan subset fungsi pada soket jika dibandingkan dengan fungsi ioctl yang ditemukan di soket Berkeley. Fungsi ioctlsocket tidak memiliki parameter perintah yang setara dengan FIOASYNC ioctl, dan SIOCATMARK adalah satu-satunya perintah tingkat soket yang didukung oleh ioctlsocket.Windows Phone 8: Fungsi ini didukung untuk aplikasi Windows Phone Store di Windows Phone 8 dan yang lebih baru.
Windows 8.1 dan Windows Server 2012 R2: Fungsi ini didukung untuk aplikasi Windows Store di Windows 8.1, Windows Server 2012 R2, dan yang lebih baru.
Persyaratan
Persyaratan | Nilai |
---|---|
Klien minimum yang didukung | Windows 8.1, Windows Vista [aplikasi desktop | Aplikasi UWP] |
Server minimum yang didukung | Windows Server 2003 [aplikasi desktop | Aplikasi UWP] |
Target Platform | Windows |
Header | winsock.h (termasuk Winsock2.h) |
Pustaka | Ws2_32.lib |
DLL | Ws2_32.dll |