Apa python batas waktu soket default?

This module provides access to the BSD socket interface. It is available on all modern Unix systems, Windows, MacOS, and probably additional platforms

Note

Some behavior may be platform dependent, since calls are made to the operating system socket APIs

The Python interface is a straightforward transliteration of the Unix system call and library interface for sockets to Python’s object-oriented style. the function returns a socket object whose methods implement the various socket system calls. Tipe parameter memiliki level yang agak lebih tinggi daripada di antarmuka C. as with read() and write() operations on Python files, buffer allocation on receive operations is automatic, and buffer length is implicit on send operations.

See also

Module Classes that simplify writing network servers. Module A TLS/SSL wrapper for socket objects

18. 1. 1. Socket families

Depending on the system and the build options, various socket families are supported by this module

The address format required by a particular socket object is automatically selected based on the address family specified when the socket object was created. Socket addresses are represented as follows

  • The address of an socket bound to a file system node is represented as a string, using the file system encoding and the 'surrogateescape' error handler (see PEP 383). An address in Linux’s abstract namespace is returned as a object with an initial null byte; note that sockets in this namespace can communicate with normal file system sockets, so programs intended to run on Linux may need to deal with both types of address. A string or object can be used for either type of address when passing it as an argument.

    Changed in version 3. 3. Previously, socket paths were assumed to use UTF-8 encoding.

  • A pair (host, port) is used for the address family, where host is a string representing either a hostname in Internet domain notation like 'daring. cwi. nl' or an IPv4 address like '100. 50. 200. 5' , and port is an integer.

  • For address family, a four-tuple (host, port, flowinfo, scopeid) is used, where flowinfo and scopeid represent the sin6_flowinfo and sin6_scope_id members in struct sockaddr_in6 in C. For module methods, flowinfo and scopeid can be omitted just for backward compatibility. Note, however, omission of scopeid can cause problems in manipulating scoped IPv6 addresses.

  • AF_NETLINK sockets are represented as pairs (pid, groups) .

  • Linux-only support for TIPC is available using the AF_TIPC address family. TIPC is an open, non-IP based networked protocol designed for use in clustered computer environments. Alamat diwakili oleh sebuah tupel, dan bidang bergantung pada jenis alamat. Bentuk tupel umumnya adalah (addr_type, v1, v2, v3< . [, scope]), where:

    • addr_type adalah salah satu dari TIPC_ADDR_NAMESEQ , TIPC_ADDR_NAME , atau . TIPC_ADDR_ID.

    • cakupan adalah salah satu dari TIPC_ZONE_SCOPE , TIPC_CLUSTER_SCOPE , dan . TIPC_NODE_SCOPE.

    • Jika addr_type adalah TIPC_ADDR_NAME , maka v1 adalah tipe server, v2 adalah port identifier, dan v3 harus 0.

      Jika addr_type adalah TIPC_ADDR_NAMESEQ , maka v1 adalah jenis server, v2 adalah nomor port bawah, dan v3 adalah nomor port atas.

      Jika addr_type adalah TIPC_ADDR_ID , maka v1 adalah node, v2 adalah referensi, dan v3 harus disetel ke 0.

  • Tuple (antarmuka, ) digunakan untuk keluarga alamat, di mana antarmuka berupa string . Nama antarmuka jaringan 'can0'. The network interface name '' dapat digunakan untuk menerima paket dari semua antarmuka jaringan keluarga ini.

  • String atau tuple (id, unit) digunakan untuk SYSPROTO_CONTROL protocol of the PF_SYSTEM family. The string is the name of a kernel control using a dynamically-assigned ID. The tuple can be used if ID and unit number of the kernel control are known or if a registered ID is used.

    Baru di versi 3. 3

  • Keluarga alamat tertentu lainnya ( AF_BLUETOOTH , AF_PACKET , .

For IPv4 addresses, two special forms are accepted instead of a host address. the empty string represents INADDR_ANY , and the string ' represents INADDR_BROADCAST . This behavior is not compatible with IPv6, therefore, you may want to avoid these if you intend to support IPv6 with your Python programs.

If you use a hostname in the host portion of IPv4/v6 socket address, the program may show a nondeterministic behavior, as Python uses the first address returned from the DNS resolution. The socket address will be resolved differently into an actual IPv4/v6 address, depending on the results from DNS resolution and/or the host configuration. For deterministic behavior use a numeric address in host portion

All errors raise exceptions. The normal exceptions for invalid argument types and out-of-memory conditions can be raised; starting from Python 3. 3, errors related to socket or address semantics raise or one of its subclasses (they used to raise )

Non-blocking mode is supported through . A generalization of this based on timeouts is supported through

18. 1. 2. Module contents

The module exports the following elements

18. 1. 2. 1. Exceptions

exception socket. error

A deprecated alias of

Changed in version 3. 3. Following PEP 3151, this class was made an alias of .

exception socket. herror

A subclass of , this exception is raised for address-related errors, i. e. for functions that use h_errno in the POSIX C API, including and . The accompanying value is a pair (h_errno, string) representing an error returned by a library call. h_errno is a numeric value, while string represents the description of h_errno, as returned by the hstrerror() C function.

Changed in version 3. 3. This class was made a subclass of .

exception socket. gaierror

A subclass of , this exception is raised for address-related errors by and . The accompanying value is a pair (error, string) representing an error returned by a library call. string represents the description of error, as returned by the gai_strerror() C function. The numeric error value will match one of the EAI_* constants defined in this module.

Changed in version 3. 3. This class was made a subclass of .

exception socket. timeout

A subclass of , this exception is raised when a timeout occurs on a socket which has had timeouts enabled via a prior call to (or implicitly through ). The accompanying value is a string whose value is currently always “timed out”

Changed in version 3. 3. This class was made a subclass of .

18. 1. 2. 2. Constants

The AF_* and SOCK_* constants are now AddressFamily and SocketKind collections.

Baru di versi 3. 4

stopkontak. Soket AF_UNIX. Soket AF_INET. AF_INET6

Konstanta ini mewakili keluarga alamat (dan protokol), yang digunakan untuk argumen pertama to. Jika konstanta tidak ditentukan maka protokol ini tidak didukung. Lebih banyak konstanta mungkin tersedia tergantung pada sistem

stopkontak. soket SOCK_STREAM. Soket SOCK_DGRAM. soket SOCK_RAW. soket SOCK_RDM. SOCK_SEQPACKET

Konstanta ini mewakili jenis soket, yang digunakan untuk argumen kedua. Lebih banyak konstanta mungkin tersedia tergantung pada sistem. (Hanya dan tampaknya berguna secara umum. )

stopkontak. Soket SOCK_CLOEXEC. SOCK_NONBLOCK

Kedua konstanta ini, jika ditentukan, dapat digabungkan dengan jenis soket dan memungkinkan Anda menyetel beberapa flag secara atomis (sehingga menghindari kemungkinan kondisi balapan dan kebutuhan untuk panggilan terpisah)

See also

Penanganan Descriptor File Aman untuk penjelasan yang lebih menyeluruh

Ketersediaan. Linux >= 2. 6. 27

Baru di versi 3. 2

SO_*soket. SOMAXCONNMSG_*SOL_*SCM_*IPPROTO_*IPPORT_*INADDR_*IP_*IPV6_*EAI_*AI_*NI_*TCP_*

Banyak konstanta dari formulir ini, didokumentasikan dalam dokumentasi Unix pada soket dan/atau protokol IP, juga ditentukan dalam modul soket. Mereka umumnya digunakan dalam argumen untuk setsockopt() dan getsockopt() methods of socket objects. In most cases, only those symbols that are defined in the Unix header files are defined; for a few symbols, default values are provided.

stopkontak. Soket AF_CAN. PF_CANSOL_CAN_*BISA_*

Banyak konstanta dari formulir ini, yang didokumentasikan dalam dokumentasi Linux, juga ditentukan dalam modul soket

Ketersediaan. Linux >= 2. 6. 25

Baru di versi 3. 3

stopkontak. CAN_BCMCAN_BCM_*

CAN_BCM, dalam keluarga protokol CAN, adalah protokol broadcast manager (BCM). Konstanta pengelola siaran, yang didokumentasikan dalam dokumentasi Linux, juga ditentukan dalam modul soket

Ketersediaan. Linux >= 2. 6. 25

Baru di versi 3. 4

stopkontak. Soket AF_RDS. PF_RDSsocket. SOL_RDSRDS_*

Banyak konstanta dari formulir ini, yang didokumentasikan dalam dokumentasi Linux, juga ditentukan dalam modul soket

Ketersediaan. Linux >= 2. 6. 30

Baru di versi 3. 3

SIO_*RCVALL_*

Konstanta untuk WSAIoctl() Windows. Konstanta digunakan sebagai argumen untuk metode objek soket

TIPC_*

Konstanta terkait TIPC, cocok dengan yang diekspor oleh C socket API. Lihat dokumentasi TIPC untuk informasi lebih lanjut

stopkontak. AF_LINK

Ketersediaan. BSD, OSX

Baru di versi 3. 4

stopkontak. has_ipv6

Konstanta ini berisi nilai boolean yang menunjukkan apakah IPv6 didukung pada platform ini

18. 1. 2. 3. Fungsi

18. 1. 2. 3. 1. Membuat soket

Semua fungsi berikut dibuat

stopkontak. socket(family=AF_INET, type=SOCK_STREAM, proto=0, fileno=None)

Buat soket baru menggunakan keluarga alamat, jenis soket, dan nomor protokol yang diberikan. Keluarga alamat harus (default), , , atau. Jenis soket harus (default), , atau mungkin salah satu dari SOCK_ konstanta lainnya. The protocol number is usually zero and may be omitted or in the case where the address family is the protocol should be one of CAN_RAW or .

Soket yang baru dibuat adalah

Berubah di versi 3. 3. Keluarga AF_CAN telah ditambahkan. Keluarga AF_RDS telah ditambahkan.

Berubah di versi 3. 4. Protokol CAN_BCM telah ditambahkan.

Berubah di versi 3. 4. Soket yang dikembalikan sekarang tidak dapat diwariskan.

soket. socketpair( [ keluarga [ , ketik [, proto]]])

Bangun sepasang objek soket yang terhubung menggunakan keluarga alamat yang diberikan, jenis soket, dan nomor protokol. Keluarga alamat, jenis soket, dan nomor protokol adalah seperti fungsi di atas. Keluarga default adalah jika ditentukan pada platform; . Ketersediaan. Unix

Soket yang baru dibuat adalah

Berubah di versi 3. 2. Objek soket yang dikembalikan sekarang mendukung seluruh API soket, bukan subset.

Berubah di versi 3. 4. Soket yang dikembalikan sekarang tidak dapat diwariskan.

soket. create_connection(address [ , batas waktu [ , source_address ]])

Hubungkan ke layanan TCP yang mendengarkan di alamat Internet (2-tuple (host, port)), and return the socket object. This is a higher-level function than : if host is a non-numeric hostname, it will try to resolve it for both and , and then try to connect to all possible addresses in turn until a connection succeeds. This makes it easy to write clients that are compatible to both IPv4 and IPv6.

Melewati parameter batas waktu opsional akan menyetel batas waktu pada instans soket sebelum mencoba menyambung. Jika tidak ada batas waktu yang diberikan, pengaturan batas waktu default global yang dikembalikan oleh akan digunakan

Jika disediakan, source_address harus berupa 2-tuple (host, port) untuk soket . Jika host atau port masing-masing adalah '' atau 0, perilaku default OS akan digunakan.

Berubah di versi 3. 2. source_address telah ditambahkan.

Berubah di versi 3. 2. dukungan untuk pernyataan tersebut telah ditambahkan.

stopkontak. fromfd(fd, keluarga, jenis, proto=0)

Gandakan deskriptor file fd (integer yang dikembalikan oleh metode fileno() objek file) dan buat objek soket dari hasilnya. Keluarga alamat, jenis soket, dan nomor protokol adalah seperti fungsi di atas. Deskriptor file harus merujuk ke soket, tetapi ini tidak dicentang — operasi selanjutnya pada objek mungkin gagal jika deskriptor file tidak valid. Fungsi ini jarang diperlukan, tetapi dapat digunakan untuk mendapatkan atau mengatur opsi soket pada soket yang diteruskan ke program sebagai input atau output standar (seperti server yang dijalankan oleh daemon inet Unix). Soket diasumsikan dalam mode pemblokiran.

Soket yang baru dibuat adalah

Berubah di versi 3. 4. Soket yang dikembalikan sekarang tidak dapat diwariskan.

stopkontak. dari bagikan(data)

Instansiasi soket dari data yang diperoleh dari metode. Soket diasumsikan dalam mode pemblokiran

Ketersediaan. Windows

Baru di versi 3. 3

stopkontak. Tipe Soket

Ini adalah objek tipe Python yang mewakili tipe objek soket. Ini sama dengan type(socket(. )) .

18. 1. 2. 3. 2. Fungsi lainnya

Modul ini juga menawarkan berbagai layanan terkait jaringan

stopkontak. getaddrinfo(host, port, keluarga=0, ketik=0, proto=0, bendera=0)

Terjemahkan argumen host/port ke dalam urutan 5-tupel yang berisi semua argumen yang diperlukan untuk membuat soket yang terhubung ke layanan tersebut. host adalah nama domain, representasi string dari alamat IPv4/v6 atau Tidak ada . port is a string service name such as 'http' , a numeric port number or None . Dengan meneruskan None sebagai nilai host dan port, Anda dapat meneruskan NULL to the underlying C API.

Argumen keluarga, jenis, dan proto dapat ditentukan secara opsional untuk mempersempit daftar alamat yang dikembalikan. Meneruskan nol sebagai nilai untuk setiap argumen ini akan memilih rentang hasil yang lengkap. Argumen flag dapat berupa satu atau beberapa konstanta AI_* , dan akan memengaruhi cara hasil dihitung dan dikembalikan. Misalnya, AI_NUMERICHOST akan menonaktifkan resolusi nama domain dan akan memunculkan error jika host adalah nama domain.

Fungsi mengembalikan daftar 5-tupel dengan struktur berikut

(keluarga, ketik, proto, canonname, sockaddr)

Dalam tupel ini, keluarga, tipe, proto semuanya bilangan bulat dan dimaksudkan untuk diteruskan ke fungsi. canonname akan menjadi string yang mewakili nama kanonis host jika AI_CANONNAME adalah bagian dari argumen flags; . sockaddr adalah tupel yang mendeskripsikan alamat soket, yang formatnya bergantung pada keluarga yang dikembalikan (a (alamat, port) . (address, port, flow info, scope id) 4-tuple for ), and is meant to be passed to the method.

Contoh berikut mengambil informasi alamat untuk koneksi TCP hipotetis ke www. python. org pada port 80 (hasil mungkin berbeda pada sistem Anda jika IPv6 tidak diaktifkan).

>>> socket.getaddrinfo("www.python.org", 80, proto=socket.IPPROTO_TCP) [(2, 1, 6, '', ('82.94.164.162', 80)), (10, 1, 6, '', ('2001:888:2000:d::a2', 80, 0, 0))]

Berubah di versi 3. 2. parameter kini dapat diteruskan menggunakan argumen kata kunci.

soket. getfqdn( [ nama ] )

Kembalikan nama domain yang sepenuhnya memenuhi syarat untuk nama. Jika nama dihilangkan atau dikosongkan, maka diartikan sebagai host lokal. Untuk menemukan nama yang sepenuhnya memenuhi syarat, nama host yang dikembalikan oleh dicentang, diikuti dengan alias untuk host, jika tersedia. Nama depan yang menyertakan titik dipilih. Jika nama domain yang memenuhi syarat tidak tersedia, nama host yang dikembalikan oleh dikembalikan

stopkontak. gethostbyname(nama host)

Menerjemahkan nama host ke format alamat IPv4. Alamat IPv4 dikembalikan sebagai string, seperti '100. 50. 200. 5' . Jika nama host adalah alamat IPv4 itu sendiri, itu dikembalikan tidak berubah. Lihat untuk antarmuka yang lebih lengkap. tidak mendukung resolusi nama IPv6, dan harus digunakan sebagai gantinya untuk dukungan tumpukan ganda IPv4/v6.

stopkontak. gethostbyname_ex(nama host)

Terjemahkan nama host ke format alamat IPv4, antarmuka yang diperluas. Kembalikan triple (hostname, aliaslist, ipaddrlist) di mana hostname adalah . tidak mendukung resolusi nama IPv6, dan harus digunakan sebagai gantinya untuk dukungan tumpukan ganda IPv4/v6.

stopkontak. gethostname()

Kembalikan string yang berisi nama host mesin tempat juru bahasa Python sedang dieksekusi

Jika Anda ingin mengetahui alamat IP mesin saat ini, Anda mungkin ingin menggunakan gethostbyname(gethostname()) . Operasi ini mengasumsikan bahwa ada pemetaan alamat-ke-host yang valid untuk host, dan asumsi tersebut tidak selalu berlaku.

Catatan. tidak selalu mengembalikan nama domain yang sepenuhnya memenuhi syarat; . getfqdn() (see above).

stopkontak. gethostbyaddr(alamat_ip)

Kembalikan triple (hostname, aliaslist, ipaddrlist) where hostname is the primary host name responding to the given ip_address, aliaslist is a (possibly empty) list of alternative host names for the same address, and ipaddrlist is a list of IPv4/v6 addresses for the same interface on the same host (most likely containing only a single address). To find the fully qualified domain name, use the function . supports both IPv4 and IPv6.

stopkontak. getnameinfo(sockaddr, bendera)

Terjemahkan alamat soket sockaddr menjadi 2-tuple (host, port) . Bergantung pada pengaturan flag, hasilnya dapat berisi nama domain yang memenuhi syarat atau representasi alamat numerik di host. Demikian pula, port dapat berisi nama port string atau nomor port numerik.

stopkontak. getprotobyname(namaprotokol)

Terjemahkan nama protokol Internet (misalnya, 'icmp' ) ke konstanta yang cocok untuk diteruskan sebagai argumen ketiga (opsional) ke . Ini biasanya hanya diperlukan untuk soket yang dibuka dalam mode "mentah" (); .

soket. getservbyname(namalayanan [ , namaprotokol ] )

Terjemahkan nama layanan Internet dan nama protokol ke nomor port untuk layanan tersebut. Nama protokol opsional, jika diberikan, harus 'tcp' atau 'udp', otherwise any protocol will match.

soket. getservbyport(port [ , namaprotokol ] )

Terjemahkan nomor port Internet dan nama protokol ke nama layanan untuk layanan tersebut. Nama protokol opsional, jika diberikan, harus 'tcp' atau 'udp', otherwise any protocol will match.

stopkontak. tol(x)

Mengonversi bilangan bulat positif 32-bit dari jaringan ke urutan byte host. Pada mesin di mana urutan byte host sama dengan urutan byte jaringan, ini adalah no-op;

stopkontak. toh (x)

Mengonversi bilangan bulat positif 16-bit dari jaringan ke urutan byte host. Pada mesin di mana urutan byte host sama dengan urutan byte jaringan, ini adalah no-op;

stopkontak. htonl(x)

Mengonversi bilangan bulat positif 32-bit dari host ke urutan byte jaringan. Pada mesin di mana urutan byte host sama dengan urutan byte jaringan, ini adalah no-op;

stopkontak. hton(x)

Mengonversi bilangan bulat positif 16-bit dari host ke urutan byte jaringan. Pada mesin di mana urutan byte host sama dengan urutan byte jaringan, ini adalah no-op;

stopkontak. inet_aton(ip_string)

Mengonversi alamat IPv4 dari format string dotted-quad (misalnya, '123. 45. 67. 89') ke format biner dikemas 32-bit, sebagai objek byte dengan panjang empat karakter. Ini berguna saat berkomunikasi dengan program yang menggunakan pustaka C standar dan membutuhkan objek bertipe struct in_addr , yang .

juga menerima string dengan kurang dari tiga titik;

Jika string alamat IPv4 yang diteruskan ke fungsi ini tidak valid, akan dimunculkan. Perhatikan bahwa apa yang valid tergantung pada implementasi C yang mendasari inet_aton() .

tidak mendukung IPv6, dan harus digunakan sebagai gantinya untuk dukungan tumpukan ganda IPv4/v6

stopkontak. inet_ntoa(packed_ip)

Mengonversi alamat IPv4 paket 32-bit (objek byte dengan panjang empat karakter) ke representasi string bertitik-empat standarnya (misalnya, '123. 45. 67. 89'). Ini berguna saat berkomunikasi dengan program yang menggunakan pustaka C standar dan membutuhkan objek bertipe struct in_addr , yang .

Jika urutan byte yang diteruskan ke fungsi ini panjangnya tidak tepat 4 byte, akan dimunculkan. tidak mendukung IPv6, dan harus digunakan sebagai gantinya untuk dukungan tumpukan ganda IPv4/v6

stopkontak. inet_pton(alamat_keluarga, ip_string)

Mengonversi alamat IP dari format string khusus keluarga menjadi format biner yang dikemas. berguna saat pustaka atau protokol jaringan memanggil objek bertipe struct in_addr (mirip dengan ) atau struct in6_addr.

Nilai yang didukung untuk address_family saat ini dan. Jika string alamat IP ip_string tidak valid, akan dimunculkan. Perhatikan bahwa apa yang valid tergantung pada nilai address_family dan implementasi yang mendasari inet_pton() .

Ketersediaan. Unix (mungkin tidak semua platform), Windows

Berubah di versi 3. 4. Dukungan Windows ditambahkan

stopkontak. inet_ntop(alamat_keluarga, paket_ip)

Konversi alamat IP yang dikemas (objek byte dari sejumlah karakter) ke representasi string khusus keluarga standarnya (misalnya, '7. 10. 0. 5' atau '5aef. 2b. 8' ). berguna ketika pustaka atau protokol jaringan mengembalikan objek bertipe struct in_addr (mirip dengan ) atau struct in6_addr.

Nilai yang didukung untuk address_family saat ini dan. Jika string packed_ip bukan panjang yang tepat untuk keluarga alamat yang ditentukan, akan dimunculkan. A dimunculkan untuk kesalahan dari panggilan ke

Ketersediaan. Unix (mungkin tidak semua platform), Windows

Berubah di versi 3. 4. Dukungan Windows ditambahkan

stopkontak. CMSG_LEN(length)

Mengembalikan panjang total, tanpa bantalan tambahan, dari item data tambahan dengan data terkait dengan panjang yang diberikan. Nilai ini sering dapat digunakan sebagai ukuran buffer untuk menerima satu item data tambahan, tetapi RFC 3542 membutuhkan aplikasi portabel untuk digunakan dan dengan demikian menyertakan ruang untuk padding, bahkan ketika item tersebut akan menjadi yang terakhir di buffer. Menaikkan jika panjang berada di luar rentang nilai yang diizinkan

Ketersediaan. sebagian besar platform Unix, mungkin yang lainnya

Baru di versi 3. 3

stopkontak. CMSG_SPACE(panjang)

Mengembalikan ukuran buffer yang diperlukan untuk menerima item data tambahan dengan data terkait dengan panjang yang diberikan, bersama dengan padding tambahan. Ruang buffer yang diperlukan untuk menerima banyak item adalah jumlah nilai untuk panjang data yang terkait. Menaikkan jika panjang berada di luar rentang nilai yang diizinkan

Perhatikan bahwa beberapa sistem mungkin mendukung data tambahan tanpa menyediakan fungsi ini. Perhatikan juga bahwa menyetel ukuran buffer menggunakan hasil fungsi ini mungkin tidak secara tepat membatasi jumlah data tambahan yang dapat diterima, karena data tambahan mungkin dapat masuk ke dalam area padding

Ketersediaan. sebagian besar platform Unix, mungkin yang lainnya

Baru di versi 3. 3

stopkontak. getdefaulttimeout()

Mengembalikan batas waktu default dalam hitungan detik (mengambang) untuk objek soket baru. Nilai None menunjukkan bahwa objek soket baru tidak memiliki waktu tunggu. Ketika modul soket pertama kali diimpor, standarnya adalah Tidak ada .

stopkontak. set defaulttimeout(batas waktu)

Setel batas waktu default dalam hitungan detik (mengambang) untuk objek soket baru. Ketika modul soket pertama kali diimpor, defaultnya adalah Tidak ada . Lihat nilai yang mungkin dan artinya masing-masing.

stopkontak. sethostname(nama)

Tetapkan nama host mesin menjadi nama. Ini akan meningkatkan jika Anda tidak memiliki hak yang cukup

Ketersediaan. Unix

Baru di versi 3. 3

stopkontak. if_nameindex()

Mengembalikan daftar tupel informasi antarmuka jaringan (indeks int, string nama). jika panggilan sistem gagal

Ketersediaan. Unix

Baru di versi 3. 3

stopkontak. if_nametoindex(jika_nama)

Mengembalikan nomor indeks antarmuka jaringan yang sesuai dengan nama antarmuka. jika tidak ada antarmuka dengan nama yang diberikan

Ketersediaan. Unix

Baru di versi 3. 3

stopkontak. if_indextoname(if_index)

Kembalikan nama antarmuka jaringan yang sesuai dengan nomor indeks antarmuka. jika tidak ada antarmuka dengan indeks yang diberikan

Ketersediaan. Unix

Baru di versi 3. 3

18. 1. 3. Objek Soket

Objek soket memiliki metode berikut. Kecuali untuk , ini sesuai dengan panggilan sistem Unix yang berlaku untuk soket

stopkontak. menerima()

Terima koneksi. Soket harus terikat ke alamat dan mendengarkan koneksi. Nilai yang dikembalikan adalah pasangan (sambungan, alamat) di mana sambungan adalah objek soket baru yang dapat digunakan untuk mengirim dan menerima .

Soket yang baru dibuat adalah

Berubah di versi 3. 4. Soket sekarang tidak dapat diwariskan.

stopkontak. ikat (alamat)

Ikat soket ke alamat. Soket tidak boleh sudah terikat. (Format alamat tergantung pada keluarga alamat — lihat di atas. )

stopkontak. menutup()

Tandai soket tertutup. Sumber daya sistem yang mendasarinya (mis. g. deskriptor file) juga ditutup ketika semua objek file dari ditutup. Setelah itu terjadi, semua operasi selanjutnya pada objek soket akan gagal. Ujung jarak jauh tidak akan menerima data lagi (setelah data antri dibilas)

Soket ditutup secara otomatis saat dikumpulkan dari sampah, tetapi disarankan untuk melakukannya secara eksplisit, atau menggunakan pernyataan di sekitarnya

Note

melepaskan sumber daya yang terkait dengan koneksi tetapi tidak serta merta menutup koneksi. Jika Anda ingin memutuskan koneksi secara tepat waktu, hubungi sebelumnya

stopkontak. terhubung (alamat)

Sambungkan ke soket jarak jauh di alamat. (Format alamat tergantung pada keluarga alamat — lihat di atas. )

stopkontak. connect_ex(alamat)

Seperti connect(address) , tetapi kembalikan indikator kesalahan alih-alih memunculkan pengecualian untuk kesalahan yang dikembalikan oleh tingkat-C connect() call (other problems, such as “host not found,” can still raise exceptions). The error indicator is 0 jika operasi berhasil, sebaliknya nilai errno variable. This is useful to support, for example, asynchronous connects.

stopkontak. melepaskan()

Masukkan objek soket ke keadaan tertutup tanpa benar-benar menutup deskriptor file yang mendasarinya. Deskriptor file dikembalikan, dan dapat digunakan kembali untuk tujuan lain

Baru di versi 3. 2

stopkontak. dup()

Gandakan soketnya

Soket yang baru dibuat adalah

Berubah di versi 3. 4. Soket sekarang tidak dapat diwariskan.

stopkontak. fileno()

Kembalikan deskriptor file soket (bilangan bulat kecil). Ini berguna dengan

Di bawah Windows bilangan bulat kecil yang dikembalikan oleh metode ini tidak dapat digunakan di mana deskriptor file dapat digunakan (seperti ). Unix tidak memiliki batasan ini

stopkontak. dapatkan_diwariskan()

Dapatkan deskriptor file soket atau pegangan soket. Benar jika soket dapat diwariskan dalam proses anak, Salah jika .

Baru di versi 3. 4

stopkontak. getpeername()

Kembalikan alamat jarak jauh yang terhubung dengan soket. Ini berguna untuk mengetahui nomor port soket IPv4/v6 jarak jauh, misalnya. (Format alamat yang dikembalikan bergantung pada keluarga alamat — lihat di atas. ) Pada beberapa sistem fungsi ini tidak didukung

stopkontak. getockname()

Kembalikan alamat soket itu sendiri. Ini berguna untuk mengetahui nomor port soket IPv4/v6, misalnya. (Format alamat yang dikembalikan bergantung pada keluarga alamat — lihat di atas. )

soket. gotockopt(tingkat, namapilihan [ , buflen ] )

Kembalikan nilai dari opsi soket yang diberikan (lihat halaman manual Unix gotockopt(2)). Konstanta simbolik yang diperlukan ( SO_* dll. ) didefinisikan dalam modul ini. Jika buflen tidak ada, opsi bilangan bulat diasumsikan dan nilai bilangan bulatnya dikembalikan oleh fungsi. Jika ada buflen, itu menentukan panjang maksimum buffer yang digunakan untuk menerima opsi, dan buffer ini dikembalikan sebagai objek bytes. Terserah pemanggil untuk mendekodekan isi buffer (lihat modul bawaan opsional untuk cara mendekodekan struktur C yang dikodekan sebagai string byte).

stopkontak. gettimeout()

Kembalikan waktu tunggu dalam hitungan detik (float) yang terkait dengan operasi soket, atau Tidak ada jika tidak ada waktu tunggu yang disetel. Ini mencerminkan panggilan terakhir ke atau.

stopkontak. ioctl (kontrol, opsi) Platform. Windows

Metodenya adalah antarmuka terbatas untuk antarmuka sistem WSAIoctl. Silakan lihat dokumentasi Win32 untuk informasi lebih lanjut

Pada platform lain, generik dan fungsi dapat digunakan;

stopkontak. dengarkan (simpanan)

Dengarkan koneksi yang dibuat ke soket. Argumen backlog menentukan jumlah maksimum koneksi antrean dan harus minimal 0;

stopkontak. makefile(mode='r', buffering=Tidak ada, *, penyandian=Tidak ada, kesalahan=Tidak ada, baris baru=Tidak ada)

Return a associated with the socket. Jenis pengembalian yang tepat bergantung pada argumen yang diberikan. Argumen ini ditafsirkan dengan cara yang sama seperti oleh fungsi bawaan

Soket harus dalam mode pemblokiran;

Menutup objek file yang dikembalikan oleh tidak akan menutup soket asli kecuali semua objek file lainnya telah ditutup dan telah dipanggil pada objek soket

Note

Di Windows, objek mirip file yang dibuat oleh tidak dapat digunakan di mana objek file dengan deskriptor file diharapkan, seperti argumen aliran dari

soket. recv(bufsize [ , tandai ] )

Menerima data dari soket. Nilai kembalian adalah objek bytes yang mewakili data yang diterima. Jumlah maksimum data yang akan diterima sekaligus ditentukan oleh bufsize. Lihat halaman manual Unix recv(2) untuk arti dari flag argumen opsional;

Note

Untuk kecocokan terbaik dengan realitas perangkat keras dan jaringan, nilai bufsize harus memiliki kekuatan yang relatif kecil sebesar 2, misalnya 4096

soket. recvfrom(bufsize [ , bendera ] )

Terima data dari soket. Nilai yang dikembalikan adalah pasangan (bytes, address) di mana bytes adalah objek bytes yang mewakili data yang diterima dan alamat . Lihat halaman manual Unix recv(2) untuk arti dari flag argumen opsional; . (Format alamat tergantung pada keluarga alamat — lihat di atas. )

soket. recvmsg(bufsize [ , ancbufsize [ , bendera ]])

Terima data normal (hingga ukuran byte) dan data tambahan dari soket. Argumen ancbufsize menetapkan ukuran dalam byte dari buffer internal yang digunakan untuk menerima data tambahan; . Ukuran buffer yang sesuai untuk data tambahan dapat dihitung menggunakan atau , dan item yang tidak sesuai dengan buffer dapat dipotong atau dibuang. Argumen flags default ke 0 dan memiliki arti yang sama seperti untuk

Nilai yang dikembalikan adalah 4-tuple. (data, ancdata, msg_flags, alamat). The data item is a object holding the non-ancillary data received. The ancdata item is a list of zero or more tuples (cmsg_level, cmsg_type, cmsg_data) representing the ancillary data (control messages) received: cmsg_level and cmsg_type are integers specifying the protocol level and protocol-specific type respectively, and cmsg_data is a object holding the associated data. The msg_flags item is the bitwise OR of various flags indicating conditions on the received message; see your system documentation for details. If the receiving socket is unconnected, address is the address of the sending socket, if available; otherwise, its value is unspecified.

Pada beberapa sistem, dan dapat digunakan untuk meneruskan deskriptor file antar proses melalui soket. Ketika fasilitas ini digunakan (seringkali terbatas pada soket), akan mengembalikan, dalam data pendukungnya, item dalam bentuk (socket. SOL_SOCKET, soket. SCM_RIGHTS, fds) , di mana fds adalah objek yang merepresentasikan deskriptor file baru sebagai array biner dari C asli . Jika muncul pengecualian setelah panggilan sistem kembali, pertama-tama ia akan mencoba menutup deskriptor file apa pun yang diterima melalui mekanisme ini. type. If raises an exception after the system call returns, it will first attempt to close any file descriptors received via this mechanism.

Beberapa sistem tidak menunjukkan panjang terpotong dari item data tambahan yang hanya diterima sebagian. Jika sebuah item muncul melampaui akhir buffer, akan mengeluarkan , dan akan mengembalikan bagiannya yang ada di dalam buffer asalkan belum dipotong sebelum dimulainya data terkait

Pada sistem yang mendukung mekanisme SCM_RIGHTS , fungsi berikut akan menerima deskriptor file hingga maxfds, mengembalikan data pesan dan daftar berisi . Lihat juga.

import socket, array def recv_fds(sock, msglen, maxfds): fds = array.array("i") # Array of ints msg, ancdata, flags, addr = sock.recvmsg(msglen, socket.CMSG_LEN(maxfds * fds.itemsize)) for cmsg_level, cmsg_type, cmsg_data in ancdata: if (cmsg_level == socket.SOL_SOCKET and cmsg_type == socket.SCM_RIGHTS): # Append data, ignoring any truncated integers at the end. fds.fromstring(cmsg_data[:len(cmsg_data) - (len(cmsg_data) % fds.itemsize)]) return msg, list(fds) _

Ketersediaan. sebagian besar platform Unix, mungkin yang lainnya

Baru di versi 3. 3

soket. recvmsg_into(buffer [ , ancbufsize [ , bendera ]])

Menerima data normal dan data tambahan dari soket, berperilaku sebagaimana mestinya, tetapi menyebarkan data non-pendukung ke dalam serangkaian buffer alih-alih mengembalikan objek byte baru. Argumen buffer harus berupa objek iterable yang mengekspor buffer yang dapat ditulisi (mis. g. objek); . Sistem operasi dapat menetapkan batas ( value SC_IOV_MAX ) pada jumlah buffer yang dapat digunakan. Argumen ancbufsize dan flags memiliki arti yang sama dengan for.

Nilai yang dikembalikan adalah 4-tuple. (nbytes, ancdata, msg_flags, address), where nbytes is the total number of bytes of non-ancillary data written into the buffers, and ancdata, msg_flags and address are the same as for .

Contoh

>>> import socket >>> s1, s2 = socket.socketpair() >>> b1 = bytearray(b'----') >>> b2 = bytearray(b'0123456789') >>> b3 = bytearray(b'--------------') >>> s1.send(b'Mary had a little lamb') 22 >>> s2.recvmsg_into([b1, memoryview(b2)[2:9], b3]) (22, [], 0, None) >>> [b1, b2, b3] [bytearray(b'Mary'), bytearray(b'01 had a 9'), bytearray(b'little lamb---')]

Ketersediaan. sebagian besar platform Unix, mungkin yang lainnya

Baru di versi 3. 3

soket. recvfrom_into(buffer [ , nbytes [ , flags ]])

Terima data dari soket, tuliskan ke buffer alih-alih membuat bytestring baru. Nilai yang dikembalikan adalah pasangan (nbytes, address) di mana nbytes adalah jumlah byte yang diterima dan alamat adalah . Lihat halaman manual Unix recv(2) untuk arti dari flag argumen opsional; . (Format alamat tergantung pada keluarga alamat — lihat di atas. )

soket. recv_into(buffer [ , nbytes [ , flags ]] )

Terima byte hingga nbytes dari soket, menyimpan data ke dalam buffer daripada membuat bytestring baru. Jika nbytes tidak ditentukan (atau 0), terima hingga ukuran yang tersedia di buffer yang diberikan. Mengembalikan jumlah byte yang diterima. Lihat halaman manual Unix recv(2) untuk arti dari flag argumen opsional;

soket. kirim(byte [ , tandai ] )

Kirim data ke soket. Soket harus terhubung ke soket jarak jauh. Argumen flag opsional memiliki arti yang sama seperti di atas. Mengembalikan jumlah byte yang dikirim. Aplikasi bertanggung jawab untuk memeriksa bahwa semua data telah dikirim; . Untuk informasi lebih lanjut tentang topik ini, konsultasikan dengan

soket. sendall(bytes [ , flags ] )

Kirim data ke soket. Soket harus terhubung ke soket jarak jauh. Argumen flag opsional memiliki arti yang sama seperti di atas. Tidak seperti , metode ini terus mengirim data dari byte hingga semua data terkirim atau terjadi kesalahan. Tidak ada yang dikembalikan jika berhasil. Pada kesalahan, pengecualian dimunculkan, dan tidak ada cara untuk menentukan berapa banyak data, jika ada, yang berhasil dikirim.

stopkontak. sendto(byte, alamat)soket. sendto(byte, flag, alamat)

Kirim data ke soket. Soket tidak boleh dihubungkan ke soket jarak jauh, karena soket tujuan ditentukan oleh alamat. Argumen flag opsional memiliki arti yang sama seperti di atas. Mengembalikan jumlah byte yang dikirim. (Format alamat tergantung pada keluarga alamat — lihat di atas. )

soket. sendmsg(buffer [ , ancdata [ , flag [, address]]])

Kirim data normal dan tambahan ke soket, kumpulkan data non-tambahan dari serangkaian buffer dan gabungkan menjadi satu pesan. Argumen buffer menentukan data non-tambahan sebagai iterable dari (mis. g. objek); . Argumen ancdata menentukan data tambahan (pesan kontrol) sebagai iterable dari nol atau lebih tupel SC_IOV_MAX) on the number of buffers that can be used. The ancdata argument specifies the ancillary data (control messages) as an iterable of zero or more tuples (cmsg_level, cmsg_type, cmsg_data), where cmsg_level and cmsg_type are integers specifying the protocol level and protocol-specific type respectively, and cmsg_data is a bytes-like object holding the associated data. Note that some systems (in particular, systems without ) might support sending only one control message per call. The flags argument defaults to 0 and has the same meaning as for . If address is supplied and not Tidak ada , ini menetapkan alamat tujuan untuk pesan tersebut. Nilai yang dikembalikan adalah jumlah byte data non-tambahan yang dikirim.

Fungsi berikut mengirimkan daftar deskriptor file fds melalui soket, pada sistem yang mendukung mekanisme SCM_RIGHTS . Lihat juga.

import socket, array def send_fds(sock, msg, fds): return sock.sendmsg([msg], [(socket.SOL_SOCKET, socket.SCM_RIGHTS, array.array("i", fds))])

Ketersediaan. sebagian besar platform Unix, mungkin yang lainnya

Baru di versi 3. 3

stopkontak. set_diwariskan(diwariskan)

Setel deskriptor file soket atau pegangan soket

Baru di versi 3. 4

stopkontak. menyetel pemblokiran (bendera)

Setel mode pemblokiran atau non-pemblokiran soket. jika bendera salah, soket disetel ke non-pemblokiran, selain itu ke mode pemblokiran

Metode ini adalah singkatan untuk panggilan tertentu

  • kaus kaki. setblocking(True) setara dengan sock. settimeout(Tidak ada)
  • kaus kaki. setblocking(False) setara dengan sock. settimeout(0. 0)
stopkontak. settimeout(nilai)

Tetapkan batas waktu untuk memblokir operasi soket. Argumen nilai dapat berupa bilangan floating point nonnegatif yang menyatakan detik, atau Tidak ada . Jika nilai bukan nol diberikan, operasi soket berikutnya akan memunculkan pengecualian jika nilai periode waktu habis telah berlalu sebelum operasi selesai. Jika nol diberikan, soket diletakkan dalam mode non-blocking. Jika None diberikan, soket dimasukkan ke mode pemblokiran.

Untuk informasi lebih lanjut, silakan berkonsultasi dengan

stopkontak. setockopt(level, namaopt, nilai)

Tetapkan nilai opsi soket yang diberikan (lihat halaman manual Unix setockopt(2)). Konstanta simbolik yang diperlukan didefinisikan dalam modul ( SO_* dll. ). Nilainya bisa berupa bilangan bulat atau objek bytes yang mewakili buffer. Dalam kasus terakhir, terserah pemanggil untuk memastikan bahwa bytestring berisi bit yang tepat (lihat modul bawaan opsional untuk cara menyandikan struktur C sebagai bytestring).

stopkontak. mematikan (bagaimana)

Matikan salah satu atau kedua bagian koneksi. Jika bagaimana SHUT_RD , penerimaan selanjutnya tidak diperbolehkan. Jika bagaimana SHUT_WR , pengiriman selanjutnya tidak diperbolehkan. Jika bagaimana SHUT_RDWR , pengiriman dan penerimaan lebih lanjut tidak diperbolehkan.

stopkontak. bagikan(process_id)

Gandakan soket dan siapkan untuk dibagikan dengan proses target. Proses target harus dilengkapi dengan process_id. Objek byte yang dihasilkan kemudian dapat diteruskan ke proses target menggunakan beberapa bentuk komunikasi antarproses dan soket dapat dibuat ulang di sana menggunakan. Setelah metode ini dipanggil, aman untuk menutup soket karena sistem operasi telah menggandakannya untuk proses target

Ketersediaan. Windows

Baru di versi 3. 3

Perhatikan bahwa tidak ada metode read() atau write(); use and without flags argument instead.

Objek soket juga memiliki atribut (hanya baca) ini yang sesuai dengan nilai yang diberikan kepada konstruktor

stopkontak. keluarga

Keluarga soket

stopkontak. Tipe

Jenis soket

stopkontak. proto

Protokol soket

18. 1. 4. Catatan tentang waktu tunggu soket

Objek soket dapat berada dalam salah satu dari tiga mode. pemblokiran, non-pemblokiran, atau batas waktu. Soket secara default selalu dibuat dalam mode pemblokiran, tetapi ini dapat diubah dengan menelepon

  • Dalam mode pemblokiran, operasi diblokir hingga selesai atau sistem mengembalikan kesalahan (seperti waktu koneksi habis)
  • Dalam mode non-pemblokiran, operasi gagal (dengan kesalahan yang sayangnya bergantung pada sistem) jika tidak dapat diselesaikan dengan segera. fungsi dari dapat digunakan untuk mengetahui kapan dan apakah soket tersedia untuk membaca atau menulis
  • Dalam mode batas waktu, operasi gagal jika tidak dapat diselesaikan dalam batas waktu yang ditentukan untuk soket (mereka memunculkan pengecualian) atau jika sistem mengembalikan kesalahan

Note

Pada tingkat sistem operasi, soket dalam mode batas waktu diatur secara internal dalam mode non-pemblokiran. Selain itu, mode pemblokiran dan batas waktu dibagi antara deskriptor file dan objek soket yang merujuk ke titik akhir jaringan yang sama. Detail implementasi ini dapat memiliki konsekuensi yang terlihat jika e. g. Anda memutuskan untuk menggunakan soket

18. 1. 4. 1. Timeout dan sambungkan metode

Operasi ini juga tunduk pada pengaturan batas waktu, dan secara umum disarankan untuk memanggil sebelum memanggil atau meneruskan parameter batas waktu ke. Namun, tumpukan jaringan sistem juga dapat mengembalikan kesalahan batas waktu koneksinya sendiri terlepas dari pengaturan batas waktu soket Python apa pun

18. 1. 4. 2. Waktu tunggu habis dan metode terima method

Jika tidak, soket dikembalikan dengan metode mewarisi batas waktu itu. Jika tidak, perilaku tergantung pada pengaturan soket pendengar

  • jika soket pendengar dalam mode pemblokiran atau dalam mode batas waktu, soket yang dikembalikan oleh dalam mode pemblokiran;
  • jika soket pendengar dalam mode non-pemblokiran, apakah soket yang dikembalikan dalam mode pemblokiran atau non-pemblokiran bergantung pada sistem operasi. Jika Anda ingin memastikan perilaku lintas platform, sebaiknya Anda mengganti setelan ini secara manual

18. 1. 5. Contoh

Berikut adalah empat contoh minimal program yang menggunakan protokol TCP/IP. server yang menggemakan semua data yang diterimanya kembali (hanya melayani satu klien), dan klien yang menggunakannya. Perhatikan bahwa server harus melakukan sequence , , , (kemungkinan mengulang untuk melayani lebih dari satu klien), sedangkan klien hanya membutuhkan sequence ,. Perhatikan juga bahwa server tidak / pada soket yang didengarkannya tetapi pada soket baru yang dikembalikan

Dua contoh pertama hanya mendukung IPv4

# Echo server program import socket HOST = '' # Symbolic name meaning all available interfaces PORT = 50007 # Arbitrary non-privileged port s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) s.bind((HOST, PORT)) s.listen(1) conn, addr = s.accept() print('Connected by', addr) while True: data = conn.recv(1024) if not data: break conn.sendall(data) conn.close() _

# Echo client program import socket HOST = 'daring.cwi.nl' # The remote host PORT = 50007 # The same port as used by the server s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) s.connect((HOST, PORT)) s.sendall(b'Hello, world') data = s.recv(1024) s.close() print('Received', repr(data))

Dua contoh berikutnya identik dengan dua contoh di atas, tetapi mendukung IPv4 dan IPv6. Sisi server akan mendengarkan keluarga alamat pertama yang tersedia (seharusnya mendengarkan keduanya). Pada sebagian besar sistem siap IPv6, IPv6 akan diutamakan dan server mungkin tidak menerima lalu lintas IPv4. Sisi klien akan mencoba untuk terhubung ke semua alamat yang dikembalikan sebagai hasil dari resolusi nama, dan mengirimkan lalu lintas ke yang pertama terhubung dengan sukses

# Echo server program import socket import sys HOST = None # Symbolic name meaning all available interfaces PORT = 50007 # Arbitrary non-privileged port s = None for res in socket.getaddrinfo(HOST, PORT, socket.AF_UNSPEC, socket.SOCK_STREAM, 0, socket.AI_PASSIVE): af, socktype, proto, canonname, sa = res try: s = socket.socket(af, socktype, proto) except OSError as msg: s = None continue try: s.bind(sa) s.listen(1) except OSError as msg: s.close() s = None continue break if s is None: print('could not open socket') sys.exit(1) conn, addr = s.accept() print('Connected by', addr) while True: data = conn.recv(1024) if not data: break conn.send(data) conn.close() _

# Echo client program import socket import sys HOST = 'daring.cwi.nl' # The remote host PORT = 50007 # The same port as used by the server s = None for res in socket.getaddrinfo(HOST, PORT, socket.AF_UNSPEC, socket.SOCK_STREAM): af, socktype, proto, canonname, sa = res try: s = socket.socket(af, socktype, proto) except OSError as msg: s = None continue try: s.connect(sa) except OSError as msg: s.close() s = None continue break if s is None: print('could not open socket') sys.exit(1) s.sendall(b'Hello, world') data = s.recv(1024) s.close() print('Received', repr(data))

Contoh berikutnya menunjukkan bagaimana menulis sebuah jaringan yang sangat sederhana dengan soket mentah pada Windows. Contoh membutuhkan hak administrator untuk memodifikasi antarmuka

import socket # the public network interface HOST = socket.gethostbyname(socket.gethostname()) # create a raw socket and bind it to the public interface s = socket.socket(socket.AF_INET, socket.SOCK_RAW, socket.IPPROTO_IP) s.bind((HOST, 0)) # Include IP headers s.setsockopt(socket.IPPROTO_IP, socket.IP_HDRINCL, 1) # receive all packages s.ioctl(socket.SIO_RCVALL, socket.RCVALL_ON) # receive a package print(s.recvfrom(65565)) # disabled promiscuous mode s.ioctl(socket.SIO_RCVALL, socket.RCVALL_OFF) _

Contoh terakhir menunjukkan cara menggunakan antarmuka soket untuk berkomunikasi ke jaringan CAN menggunakan protokol soket mentah. Untuk menggunakan CAN dengan protokol pengelola siaran, buka soket dengan

socket.socket(socket.AF_CAN, socket.SOCK_DGRAM, socket.CAN_BCM) _

Setelah mengikat ( CAN_RAW ) atau menghubungkan () soket, Anda dapat menggunakan , dan operasi (dan pasangannya) pada .

Contoh ini mungkin memerlukan hak khusus

import socket, array def recv_fds(sock, msglen, maxfds): fds = array.array("i") # Array of ints msg, ancdata, flags, addr = sock.recvmsg(msglen, socket.CMSG_LEN(maxfds * fds.itemsize)) for cmsg_level, cmsg_type, cmsg_data in ancdata: if (cmsg_level == socket.SOL_SOCKET and cmsg_type == socket.SCM_RIGHTS): # Append data, ignoring any truncated integers at the end. fds.fromstring(cmsg_data[:len(cmsg_data) - (len(cmsg_data) % fds.itemsize)]) return msg, list(fds) _0

Menjalankan contoh beberapa kali dengan penundaan yang terlalu kecil di antara eksekusi, dapat menyebabkan kesalahan ini

import socket, array def recv_fds(sock, msglen, maxfds): fds = array.array("i") # Array of ints msg, ancdata, flags, addr = sock.recvmsg(msglen, socket.CMSG_LEN(maxfds * fds.itemsize)) for cmsg_level, cmsg_type, cmsg_data in ancdata: if (cmsg_level == socket.SOL_SOCKET and cmsg_type == socket.SCM_RIGHTS): # Append data, ignoring any truncated integers at the end. fds.fromstring(cmsg_data[:len(cmsg_data) - (len(cmsg_data) % fds.itemsize)]) return msg, list(fds) _1

Ini karena eksekusi sebelumnya telah meninggalkan soket dalam keadaan TIME_WAIT , dan tidak dapat segera digunakan kembali.

Ada tanda yang harus disetel, untuk mencegah hal ini, soket. SO_REUSEADDR .

import socket, array def recv_fds(sock, msglen, maxfds): fds = array.array("i") # Array of ints msg, ancdata, flags, addr = sock.recvmsg(msglen, socket.CMSG_LEN(maxfds * fds.itemsize)) for cmsg_level, cmsg_type, cmsg_data in ancdata: if (cmsg_level == socket.SOL_SOCKET and cmsg_type == socket.SCM_RIGHTS): # Append data, ignoring any truncated integers at the end. fds.fromstring(cmsg_data[:len(cmsg_data) - (len(cmsg_data) % fds.itemsize)]) return msg, list(fds) _2

the SO_REUSEADDR flag tells the kernel to reuse a local socket in TIME_WAIT state, without waiting for its natural timeout to expire.

See also

For an introduction to socket programming (in C), see the following papers

  • An Introductory 4. 3BSD Interprocess Communication Tutorial, by Stuart Sechrest
  • An Advanced 4. 3BSD Interprocess Communication Tutorial, by Samuel J. Leffler et al,

both in the UNIX Programmer’s Manual, Supplementary Documents 1 (sections PS1. 7 and PS1. 8). The platform-specific reference material for the various socket-related system calls are also a valuable source of information on the details of socket semantics. For Unix, refer to the manual pages; for Windows, see the WinSock (or Winsock 2) specification. For IPv6-ready APIs, readers may want to refer to RFC 3493 titled Basic Socket Interface Extensions for IPv6

What is the socket timeout?

socket timeout — a maximum time of inactivity between two data packets when exchanging data with a server .

How to set timeout in socket Python?

You can make an instance of a socket object and call a gettimeout() method to get the default timeout value and the settimeout() method to set a specific timeout value .

Apakah soket Python memblokir secara default?

By default, TCP sockets are placed in a blocking mode . Ini berarti bahwa kontrol tidak dikembalikan ke program Anda sampai beberapa operasi tertentu selesai. For example, if you call the connect() method, the connection blocks your program until the operation is complete.

How do you set timeout in Python?

To set a timeout for the Python Requests library, you can pass the "timeout" parameter for GET, POST, PUT, HEAD, and DELETE methods . The "timeout" parameter allows you to select the maximum time (in seconds) for the request to complete.

Postingan terbaru

LIHAT SEMUA