Bagikan melalui


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
WSANOTINITIALISED
Panggilan WSAStartup yang berhasil harus terjadi sebelum menggunakan fungsi ini.
WSAENETDOWN
Subsistem jaringan gagal.
WSAEINPROGRESS
Pemblokiran panggilan Windows Sockets 1.1 sedang berlangsung, atau penyedia layanan masih memproses fungsi panggilan balik.
WSAENOTSOCK
Deskriptor bukan soket.
WSAEFAULT
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

Lihat juga

WSAAsyncSelect

WSAEventSelect

WSAIoctl

Fungsi Winsock

Referensi Winsock

getsockopt

setsockopt

soket