Assemblyda accept() tizim chaqirig‘i va ulanishni qabul qilish
Last updated
Last updated
accept()
tizim chaqirig‘i nima ?accept()
tizim chaqirig‘i TCP socketda yangi ulanishni qabul qilish uchun ishlatiladi. Server socketga kelgan ulanish so‘rovi tinglanish rejimida (listen()
) bo‘lsa, accept()
ulanishni qabul qiladi va yangi socket fayl deskriptorini qaytaradi. Bu yangi socket mijoz bilan aloqani boshqarish uchun ishlatiladi.
accept()
tizim chaqirig‘i parametrlarisocket_fd
Server socket fayl deskriptori
addr
Mijozning IP manzili va portini saqlovchi struktura (ixtiyoriy)
addrlen
addr
strukturasining uzunligi (ixtiyoriy)
Agar addr
yoki addrlen
parametrlarini ishlatmasangiz, ular 0
yoki NULL
bo‘lishi mumkin.
Ulanishni qabul qilgandan so‘ng, mijozning IP manzili va porti sockaddr_in
strukturasida qaytariladi. Bu struktura quyidagicha ko‘rinishga ega:
Assemblyda accept()
tizim chaqirig‘i quyidagi qadamlar orqali amalga oshiriladi:
eax
registriga sys_socketcall
tizim chaqiruvining identifikatori (0x66
) yuklanadi.
ebx
registriga accept
funksiyasi kodi (5
) yuklanadi.
ecx
registriga parametrlar jadvalining manzili yuklanadi.
int 0x80
instruktsiyasi yordamida tizim chaqirig‘i amalga oshiriladi.
Agar chaqiruv muvaffaqiyatli bo‘lsa, yangi socket fayl deskriptori eax
registrida qaytariladi. Xato yuz bersa, eax
manfiy qiymat qaytaradi.
accept()
tizim chaqirig‘iServer socket:
Server socket allaqachon yaratilgan, bind()
va listen()
chaqiruvlari orqali sozlangan bo‘lishi kerak.
accept() tizim chaqiruvi:
accept()
yangi ulanishni kutadi va ulanish qabul qilingandan so‘ng yangi socket fayl deskriptorini qaytaradi.
sockaddr_in:
Bu struktura mijozning IP manzili va port raqamini saqlaydi. Agar bu parametrlar kerak bo‘lmasa, addr
va addrlen
qiymatlarini 0
qilib qo‘yish mumkin.
Xatoliklarni tekshirish:
Agar tizim chaqiruvi muvaffaqiyatsiz bo‘lsa, eax
registrida manfiy qiymat qaytadi.
Socketlarni yopish: Mijoz bilan aloqa tugagach, avval mijoz socketi, keyin server socketi yopiladi.
Qo‘shimcha ma'lumotlar
Socketning ishlash tartibi:
Socket yaratish (socket()
)
Socketni IP manzil va portga bog‘lash (bind()
)
Keluvchi ulanishlarni kutish (listen()
)
Ulanishni qabul qilish (accept()
)
Ma'lumot almashinuvi (send()
, recv()
)
Socketlarni yopish (close()
)
Socket oilalari:
AF_INET
– IPv4 uchun
AF_INET6
– IPv6 uchun
AF_UNIX
– Lokal socket uchun
Protokol turlari:
SOCK_STREAM
– TCP ulanish uchun
SOCK_DGRAM
– UDP ulanishsiz protokol uchun
accept()
tizim chaqiruvi TCP server socketda yangi ulanishlarni qabul qilish uchun ishlatiladi. Ushbu qo‘llanma orqali assemblyda accept()
tizim chaqirig‘ini qanday amalga oshirishni, parametrlarni qanday sozlashni va socketlarni qanday boshqarishni o‘rgandingiz.