CAsyncSocket
Sınıf
Ağ iletişiminin bir uç noktası olan Bir Windows Yuvayı temsil eder.
Sözdizimi
class CAsyncSocket : public CObject
Üyeler
Ortak Oluşturucular
Veri Akışı Adı | Açıklama |
---|---|
CAsyncSocket::CAsyncSocket |
Bir CAsyncSocket nesne oluşturur. |
Genel Yöntemler
Veri Akışı Adı | Açıklama |
---|---|
CAsyncSocket::Accept |
Yuvadaki bir bağlantıyı kabul eder. |
CAsyncSocket::AsyncSelect |
Yuva için olay bildirimi isteğinde bulunur. |
CAsyncSocket::Attach |
Bir nesneye yuva tutamacını CAsyncSocket ekler. |
CAsyncSocket::Bind |
Yerel adresi yuvayla ilişkilendirir. |
CAsyncSocket::Close |
Yuvayı kapatır. |
CAsyncSocket::Connect |
Eş yuvayla bağlantı kurar. |
CAsyncSocket::Create |
Bir yuva oluşturur. |
CAsyncSocket::CreateEx |
Gelişmiş seçeneklere sahip bir yuva oluşturur. |
CAsyncSocket::Detach |
Bir nesneden CAsyncSocket yuva tutamacını ayırır. |
CAsyncSocket::FromHandle |
Yuva tutamacı verilen bir CAsyncSocket nesneye işaretçi döndürür. |
CAsyncSocket::GetLastError |
Başarısız olan son işlemin hata durumunu alır. |
CAsyncSocket::GetPeerName |
Yuvanın bağlı olduğu eş yuvanın adresini alır. |
CAsyncSocket::GetPeerNameEx |
Yuvanın bağlı olduğu eş yuvanın adresini alır (IPv6 adreslerini işler). |
CAsyncSocket::GetSockName |
Yuvanın yerel adını alır. |
CAsyncSocket::GetSockNameEx |
Yuvanın yerel adını alır (IPv6 adreslerini işler). |
CAsyncSocket::GetSockOpt |
Yuva seçeneğini alır. |
CAsyncSocket::IOCtl |
Yuva modunu denetler. |
CAsyncSocket::Listen |
Gelen bağlantı isteklerini dinlemek için bir yuva oluşturur. |
CAsyncSocket::Receive |
Yuvadan veri alır. |
CAsyncSocket::ReceiveFrom |
Bir veri birimi alır ve kaynak adresi depolar. |
CAsyncSocket::ReceiveFromEx |
Bir veri birimi alır ve kaynak adresi depolar (IPv6 adreslerini işler). |
CAsyncSocket::Send |
Verileri bağlı bir yuvaya gönderir. |
CAsyncSocket::SendTo |
Verileri belirli bir hedefe gönderir. |
CAsyncSocket::SendToEx |
Verileri belirli bir hedefe gönderir (IPv6 adreslerini işler). |
CAsyncSocket::SetSockOpt |
Yuva seçeneğini ayarlar. |
CAsyncSocket::ShutDown |
Yuvada ve/veya Receive çağrıları Send devre dışı bırakır. |
CASyncSocket::Socket |
Bir yuva tutamacı ayırır. |
Korumalı Yöntemler
Veri Akışı Adı | Açıklama |
---|---|
CAsyncSocket::OnAccept |
çağrısı Accept yaparak bekleyen bağlantı isteklerini kabul edebildiğini bir dinleme yuvasına bildirir. |
CAsyncSocket::OnClose |
Bağlı yuvanın kapandığını bir yuvaya bildirir. |
CAsyncSocket::OnConnect |
Bağlantı girişiminin başarıyla veya hatayla tamamlandığını bir bağlantı yuvasına bildirir. |
CAsyncSocket::OnOutOfBandData |
Alıcı yuvaya, genellikle acil bir ileti olmak üzere, bant dışı verilerin okunması gerektiğini bildirir. |
CAsyncSocket::OnReceive |
bir dinleme yuvasına çağrılarak Receive alınacak veriler olduğunu bildirir. |
CAsyncSocket::OnSend |
çağrısı Send yaparak veri gönderebileceğini bir yuvaya bildirir. |
Ortak İşleçler
Veri Akışı Adı | Açıklama |
---|---|
CAsyncSocket::operator = | Nesneye yeni bir CAsyncSocket değer atar. |
CAsyncSocket::operator SOCKET | Nesnenin tutamacını SOCKET CAsyncSocket almak için bu işleci kullanın. |
Ortak Veri Üyeleri
Veri Akışı Adı | Açıklama |
---|---|
CAsyncSocket::m_hSocket |
Bu CAsyncSocket nesneye SOCKET bağlı tanıtıcıyı gösterir. |
Açıklamalar
Sınıfı CAsyncSocket
, Windows Yuva İşlevleri API'sini kapsüller ve MFC ile birlikte Windows Yuvalarını kullanmak isteyen programcılar için nesne odaklı bir soyutlama sağlar.
Bu sınıf, ağ iletişimlerini anladığınız varsayımını temel alır. Unicode ve çok baytlı karakter kümesi (MBCS) dizeleri arasındaki engelleme, bayt sırası farklarını ve dönüştürmeleri işlemek sizin sorumluluğundadır. Bu sorunları sizin için yöneten daha kullanışlı bir arabirim istiyorsanız bkz. sınıfı CSocket
.
Bir CAsyncSocket
nesneyi kullanmak için oluşturucusunu çağırın, ardından kabul edilen yuvalar dışında temel yuva tutamacını (türSOCKET
) oluşturmak için işlevini çağırınCreate
. Sunucu yuvası için üye işlevini çağırın Listen
ve bir istemci yuvası için üye işlevini çağırın Connect
. Sunucu yuvası, bir bağlantı isteği aldıktan sonra işlevi çağırmalıdır Accept
. Yuvalar arasındaki iletişimi gerçekleştirmek için kalan CAsyncSocket
işlevleri kullanın. Tamamlandıktan sonra, yığında oluşturulduysa nesneyi yok CAsyncSocket
edin; yıkıcı işlevi otomatik olarak çağırır Close
. SOCKET
Veri türü Windows Yuvaları: Arka Plan makalesinde açıklanmıştır.
Not
Statik olarak bağlı bir MFC uygulamasında ikincil iş parçacıklarında MFC yuvalarını kullanırken, yuva kitaplıklarını başlatmak için yuvaları kullanan her iş parçacığını çağırmanız AfxSocketInit
gerekir. Varsayılan olarak, AfxSocketInit
yalnızca birincil iş parçacığında çağrılır.
Daha fazla bilgi için bkz. Windows Yuvaları: Sınıf CAsyncSocket
ve ilgili makaleleri kullanma. ayrıca Windows Yuvaları 2 API'sini kullanma.
Devralma Hiyerarşisi
CAsyncSocket
Gereksinimler
Üstbilgi: afxsock.h
CAsyncSocket::Accept
Yuvadaki bir bağlantıyı kabul etmek için bu üye işlevini çağır.
virtual BOOL Accept(
CAsyncSocket& rConnectedSocket,
SOCKADDR* lpSockAddr = NULL,
int* lpSockAddrLen = NULL);
Parametreler
rConnectedSocket
Bağlantı için kullanılabilen yeni bir yuvayı tanımlayan başvuru.
lpSockAddr
Ağ üzerinde bilinen bağlantı yuvasının adresini alan bir SOCKADDR
yapı işaretçisi. Bağımsız değişkenin lpSockAddr
tam biçimi, yuva oluşturulduğunda oluşturulan adres ailesi tarafından belirlenir. ve/veya lpSockAddrLen
değerine NULL
eşitselpSockAddr
, kabul edilen yuvanın uzak adresi hakkında hiçbir bilgi döndürülür.
lpSockAddrLen
Adresin bayt cinsinden lpSockAddr
uzunluğuna yönelik bir işaretçi. lpSockAddrLen
bir value-result parametresidir: başlangıçta tarafından lpSockAddr
işaret edilen boşluk miktarını içermelidir; dönüşte döndürülen adresin gerçek uzunluğunu (bayt cinsinden) içerir.
Dönüş Değeri
İşlev başarılı olursa sıfır olmayan; aksi takdirde 0 ve belirli bir hata kodu çağrılarak GetLastError
alınabilir. Bu üye işlevi için aşağıdaki hatalar geçerlidir:
WSANOTINITIALISED
Bu API'nin kullanılması için başarılıAfxSocketInit
bir işlem gerçekleştirilmelidir.WSAENETDOWN
Windows Yuvaları uygulaması, ağ alt sisteminin başarısız olduğunu algılamıştı.WSAEFAULT
BağımsızlpSockAddrLen
değişken çok küçük (birSOCKADDR
yapının boyutundan daha küçük).WSAEINPROGRESS
Engelleyen bir Windows Yuvaları çağrısı devam ediyor.WSAEINVAL
Listen
kabul edilmeden önce çağrılmıyor.WSAEMFILE
Kabul etmek için girişte kuyruk boş olur ve kullanılabilir tanımlayıcı yoktur.WSAENOBUFS
Kullanılabilir arabellek alanı yok.WSAENOTSOCK
Tanımlayıcı bir yuva değil.WSAEOPNOTSUPP
Başvuruda bulunan yuva, bağlantı odaklı hizmeti destekleyen bir tür değildir.WSAEWOULDBLOCK
Yuva engellenmedi olarak işaretlenir ve kabul edilecek bağlantı yoktur.
Açıklamalar
Bu yordam, bekleyen bağlantılar kuyruğundaki ilk bağlantıyı ayıklar, bu yuvayla aynı özelliklere sahip yeni bir yuva oluşturur ve öğesine rConnectedSocket
ekler. Kuyrukta bekleyen bağlantı yoksa sıfır Accept
döndürür ve GetLastError
bir hata döndürür. Kabul edilen yuva (rConnectedSocket
), daha fazla bağlantı kabul etmek için kullanılamaz. Özgün yuva açık ve dinlemede kalır.
bağımsız değişkeni lpSockAddr
, iletişim katmanında bilinen bağlantı yuvasının adresiyle doldurulmuş bir sonuç parametresidir. Accept
gibi SOCK_STREAM
bağlantı tabanlı yuva türleriyle kullanılır.
CAsyncSocket::AsyncSelect
Bir yuva için olay bildirimi istemek için bu üye işlevini çağır.
BOOL AsyncSelect(long lEvent = FD_READ | FD_WRITE | FD_OOB | FD_ACCEPT | FD_CONNECT | FD_CLOSE);
Parametreler
lEvent
Uygulamanın ilgilendiği ağ olaylarının bir bileşimini belirten bit maskesi.
FD_READ
Okumaya hazır olduğunu bildiren bir bildirim almak istiyorsunuz.FD_WRITE
Veriler okunmaya uygun olduğunda bildirim almak istiyorsunuz.FD_OOB
Bant dışı verilerin geldiği bildirimini almak istiyorsunuz.FD_ACCEPT
Gelen bağlantıların bildirimini almak istiyorsunuz.FD_CONNECT
Bağlantı sonuçlarının bildirimini almak istiyorsunuz.FD_CLOSE
Bir yuva eş tarafından kapatıldığında bildirim almak istiyorsunuz.
Dönüş Değeri
İşlev başarılı olursa sıfır olmayan; aksi takdirde 0 ve belirli bir hata kodu çağrılarak GetLastError
alınabilir. Bu üye işlevi için aşağıdaki hatalar geçerlidir:
WSANOTINITIALISED
Bu API'nin kullanılması için başarılıAfxSocketInit
bir işlem gerçekleştirilmelidir.WSAENETDOWN
Windows Yuvaları uygulaması, ağ alt sisteminin başarısız olduğunu algılamıştı.WSAEINVAL
Belirtilen parametrelerden birinin geçersiz olduğunu gösterir.WSAEINPROGRESS
Engelleyen bir Windows Yuvaları işlemi devam ediyor.
Açıklamalar
Bu işlev, yuva için hangi MFC geri çağırma bildirimi işlevlerinin çağrılacağını belirtmek için kullanılır. AsyncSelect
otomatik olarak bu yuvayı engelsiz moda ayarlar. Daha fazla bilgi için Windows Yuvaları: Yuva Bildirimleri makalesine bakın.
CAsyncSocket::Attach
Tanıtıcıyı bir CAsyncSocket
nesneye eklemek hSocket
için bu üye işlevini çağırın.
BOOL Attach(
SOCKET hSocket, long lEvent = FD_READ | FD_WRITE | FD_OOB | FD_ACCEPT | FD_CONNECT | FD_CLOSE);
Parametreler
hSocket
Bir yuvanın tutamacını içerir.
lEvent
Uygulamanın ilgilendiği ağ olaylarının bir bileşimini belirten bit maskesi.
FD_READ
Okumaya hazır olduğunu bildiren bir bildirim almak istiyorsunuz.FD_WRITE
Veriler okunmaya uygun olduğunda bildirim almak istiyorsunuz.FD_OOB
Bant dışı verilerin geldiği bildirimini almak istiyorsunuz.FD_ACCEPT
Gelen bağlantıların bildirimini almak istiyorsunuz.FD_CONNECT
Bağlantı sonuçlarının bildirimini almak istiyorsunuz.FD_CLOSE
Bir yuva eş tarafından kapatıldığında bildirim almak istiyorsunuz.
Dönüş Değeri
İşlev başarılı olursa sıfır olmayan.
Açıklamalar
Tanıtıcı SOCKET
nesnenin m_hSocket
veri üyesinde depolanır.
CAsyncSocket::Bind
Yerel adresi yuvayla ilişkilendirmek için bu üye işlevini çağırın.
BOOL Bind(
UINT nSocketPort,
LPCTSTR lpszSocketAddress = NULL);
BOOL Bind (
const SOCKADDR* lpSockAddr,
int nSockAddrLen);
Parametreler
nSocketPort
Yuva uygulamasını tanımlayan bağlantı noktası.
lpszSocketAddress
Ağ adresi, "128.56.22.8" gibi noktalı bir sayıdır. Bu parametre için dizenin NULL
geçirilmesi, örneğin tüm ağ arabirimlerinde istemci etkinliğini dinlemesi gerektiğini gösterir CAsyncSocket
.
lpSockAddr
Bu yuvaya atanacak adresi içeren bir SOCKADDR
yapı işaretçisi.
nSockAddrLen
Adresin bayt cinsinden lpSockAddr
uzunluğu.
Dönüş Değeri
İşlev başarılı olursa sıfır olmayan; aksi takdirde 0 ve belirli bir hata kodu çağrılarak GetLastError
alınabilir. Aşağıdaki liste, döndürülebilecek hatalardan birkaçını kapsar. Tam liste için bkz . Windows Yuvaları Hata Kodları.
WSANOTINITIALISED
Bu API'nin kullanılması için başarılıAfxSocketInit
bir işlem gerçekleştirilmelidir.WSAENETDOWN
Windows Yuvaları uygulaması, ağ alt sisteminin başarısız olduğunu algılamıştı.WSAEADDRINUSE
Belirtilen adres zaten kullanılıyor. (altındakiSetSockOpt
yuva seçeneğineSO_REUSEADDR
bakın.)WSAEFAULT
BağımsıznSockAddrLen
değişken çok küçük (birSOCKADDR
yapının boyutundan daha küçük).WSAEINPROGRESS
Engelleyen bir Windows Yuvaları çağrısı devam ediyor.WSAEAFNOSUPPORT
Belirtilen adres ailesi bu bağlantı noktası tarafından desteklenmiyor.WSAEINVAL
Yuva zaten bir adrese bağlı.WSAENOBUFS
Yeterli arabellek yok, çok fazla bağlantı var.WSAENOTSOCK
Tanımlayıcı bir yuva değil.
Açıklamalar
Bu yordam, sonraki Connect
veya çağrıların öncesinde bağlı olmayan bir veri birimi veya Listen
akış yuvasında kullanılır. Bağlantı isteklerini kabul etmeden önce, bir dinleme sunucusu yuvasının bir bağlantı noktası numarası seçmesi ve çağırarak Bind
Bunu Windows Yuvaları'na duyurması gerekir. Bind
, adlandırılmamış bir yuvaya yerel bir ad atayarak yuvanın yerel ilişkilendirmesini (ana bilgisayar adresi/bağlantı noktası numarası) oluşturur.
CAsyncSocket::CAsyncSocket
Boş bir yuva nesnesi oluşturur.
CAsyncSocket();
Açıklamalar
Nesnesini oluşturduktan sonra, veri yapısını oluşturmak SOCKET
ve adresini bağlamak için üye işlevini çağırmanız Create
gerekir. (Windows Yuvaları iletişiminin sunucu tarafında, dinleme yuvası çağrıda kullanmak üzere bir yuva oluşturduğunda Accept
, bu yuva için çağrı Create
yapmazsınız.)
CAsyncSocket::Close
Yuvayı kapatır.
virtual void Close();
Açıklamalar
Bu işlev yuva tanımlayıcısını serbest bırakır, böylece buna yapılan diğer başvurular hatasıyla WSAENOTSOCK
başarısız olur. Temel alınan yuvaya son başvuru buysa, ilişkili adlandırma bilgileri ve kuyruğa alınan veriler atılır. Yuva nesnesinin yıkıcısı sizi çağırır Close
.
için CAsyncSocket
, ancak için CSocket
değil, semantiği Close
yuva seçeneklerinden SO_LINGER
ve SO_DONTLINGER
etkilenir. Daha fazla bilgi için bkz. üye işlevi GetSockOpt
.
CAsyncSocket::Connect
Bağlantısız bir akışa veya veri birimi yuvasına bağlantı kurmak için bu üye işlevini çağır.
BOOL Connect(
LPCTSTR lpszHostAddress,
UINT nHostPort);
BOOL Connect(
const SOCKADDR* lpSockAddr,
int nSockAddrLen);
Parametreler
lpszHostAddress
Bu nesnenin bağlı olduğu yuvanın ağ adresi: "ftp.microsoft.com" gibi bir makine adı veya "128.56.22.8" gibi noktalı bir sayı.
nHostPort
Yuva uygulamasını tanımlayan bağlantı noktası.
lpSockAddr
Bağlı yuvanın adresini içeren bir SOCKADDR
yapı işaretçisi.
nSockAddrLen
Adresin bayt cinsinden lpSockAddr
uzunluğu.
Dönüş Değeri
İşlev başarılı olursa sıfır olmayan; aksi takdirde 0 ve belirli bir hata kodu çağrılarak GetLastError
alınabilir. Bu, hata kodunu WSAEWOULDBLOCK
gösteriyorsa ve uygulamanız geçersiz kılınabilir geri çağırmaları kullanıyorsa, bağlantı işlemi tamamlandığında uygulamanız bir OnConnect
ileti alır. Bu üye işlevi için aşağıdaki hatalar geçerlidir:
WSANOTINITIALISED
Bu API'nin kullanılması için başarılıAfxSocketInit
bir işlem gerçekleştirilmelidir.WSAENETDOWN
Windows Yuvaları uygulaması, ağ alt sisteminin başarısız olduğunu algılamıştı.WSAEADDRINUSE
Belirtilen adres zaten kullanılıyor.WSAEINPROGRESS
Engelleyen bir Windows Yuvaları çağrısı devam ediyor.WSAEADDRNOTAVAIL
Belirtilen adres yerel makineden kullanılamıyor.WSAEAFNOSUPPORT
Belirtilen ailedeki adresler bu yuvayla kullanılamaz.WSAECONNREFUSED
Bağlanma girişimi reddedildi.WSAEDESTADDRREQ
Hedef adres gereklidir.WSAEFAULT
BağımsıznSockAddrLen
değişken yanlış.WSAEINVAL
Geçersiz ana bilgisayar adresi.WSAEISCONN
Yuva zaten bağlı.WSAEMFILE
Başka dosya tanımlayıcısı yok.WSAENETUNREACH
Ağa şu anda bu konaktan ulaşılamıyor.WSAENOBUFS
Kullanılabilir arabellek alanı yok. Yuva bağlanamıyor.WSAENOTSOCK
Tanımlayıcı bir yuva değil.WSAETIMEDOUT
Bağlantı kurmadan bağlanma girişimi zaman aşımına uğradı.WSAEWOULDBLOCK
Yuva engellenmedi olarak işaretlenir ve bağlantı hemen tamamlanamaz.
Açıklamalar
Yuva ilişkisizse, sistem tarafından yerel ilişkilendirmeye benzersiz değerler atanır ve yuva bağlı olarak işaretlenir. Ad yapısının adres alanının tümü sıfırsa sıfır Connect
döndüreceğini unutmayın. Genişletilmiş hata bilgilerini almak için üye işlevini çağırın GetLastError
.
Akış yuvaları için (tür SOCK_STREAM
), yabancı konağa etkin bir bağlantı başlatılır. Yuva çağrısı başarıyla tamamlandığında, yuva veri göndermeye/almaya hazırdır.
Bir veri birimi yuvası (tür SOCK_DGRAM
) için, sonraki Send
ve Receive
çağrılarda kullanılacak bir varsayılan hedef ayarlanır.
CAsyncSocket::Create
Windows yuvasını Create
oluşturmak ve eklemek için bir yuva nesnesi oluşturduktan sonra üye işlevini çağırın.
BOOL Create(
UINT nSocketPort = 0,
int nSocketType = SOCK_STREAM,
long lEvent = FD_READ | FD_WRITE | FD_OOB | FD_ACCEPT | FD_CONNECT | FD_CLOSE,
LPCTSTR lpszSocketAddress = NULL);
Parametreler
nSocketPort
Yuva ile kullanılacak iyi bilinen bir bağlantı noktası veya Windows Yuvaları'nın bir bağlantı noktası seçmesini istiyorsanız 0.
nSocketType
SOCK_STREAM
veya SOCK_DGRAM
.
lEvent
Uygulamanın ilgilendiği ağ olaylarının bir bileşimini belirten bit maskesi.
FD_READ
Okumaya hazır olduğunu bildiren bir bildirim almak istiyorsunuz.FD_WRITE
Yazmaya hazır olduğunu bildiren bir bildirim almak istiyorsunuz.FD_OOB
Bant dışı verilerin geldiği bildirimini almak istiyorsunuz.FD_ACCEPT
Gelen bağlantıların bildirimini almak istiyorsunuz.FD_CONNECT
Tamamlanan bağlantının bildirimini almak istiyorsunuz.FD_CLOSE
Yuva kapatma bildirimi almak istiyorsunuz.
lpszSockAddress
Bağlı yuvanın ağ adresini içeren bir dize işaretçisi, "128.56.22.8" gibi noktalı bir sayı. Bu parametre için dizenin NULL
geçirilmesi, örneğin tüm ağ arabirimlerinde istemci etkinliğini dinlemesi gerektiğini gösterir CAsyncSocket
.
Dönüş Değeri
İşlev başarılı olursa sıfır olmayan; aksi takdirde 0 ve belirli bir hata kodu çağrılarak GetLastError
alınabilir. Bu üye işlevi için aşağıdaki hatalar geçerlidir:
WSANOTINITIALISED
Bu API'nin kullanılması için başarılıAfxSocketInit
bir işlem gerçekleştirilmelidir.WSAENETDOWN
Windows Yuvaları uygulaması, ağ alt sisteminin başarısız olduğunu algılamıştı.WSAEAFNOSUPPORT
Belirtilen adres ailesi desteklenmiyor.WSAEINPROGRESS
Engelleyen bir Windows Yuvaları işlemi devam ediyor.WSAEMFILE
Başka dosya tanımlayıcısı yok.WSAENOBUFS
Kullanılabilir arabellek alanı yok. Yuva oluşturulamıyor.WSAEPROTONOSUPPORT
Belirtilen bağlantı noktası desteklenmiyor.WSAEPROTOTYPE
Belirtilen bağlantı noktası bu yuva için yanlış türde.WSAESOCKTNOSUPPORT
Belirtilen yuva türü bu adres ailesinde desteklenmiyor.
Açıklamalar
Create
çağrıları Socket
ve başarılı olursa, yuvayı belirtilen adrese bağlamak için çağırır Bind
. Aşağıdaki yuva türleri desteklenir:
SOCK_STREAM
Sıralı, güvenilir, tam çift yönlü, bağlantı tabanlı bayt akışları sağlar. İnternet adresi ailesi için İletim Denetimi Protokolü'ni (TCP) kullanır.SOCK_DGRAM
Sabit (genellikle küçük) maksimum uzunlukta bağlantısız, güvenilir olmayan paketler olan veri birimlerini destekler. İnternet adresi ailesi için Kullanıcı Veri Birimi Protokolü'ni (UDP) kullanır.Not
Accept
Üye işlevi, parametresi olarak yeni, boşCSocket
bir nesneye başvuru alır. çağırmadanAccept
önce bu nesneyi oluşturmanız gerekir. Bu yuva nesnesi kapsam dışına çıkarsa bağlantının kapandığını unutmayın. Bu yeni yuva nesnesi için çağırmayınCreate
.
Önemli
Create
iş parçacığı güvenli değildir . Farklı iş parçacıkları tarafından aynı anda çağrılabileceği çok iş parçacıklı bir ortamda çağırıyorsanız, her çağrıyı bir mutex veya başka bir eşitleme kilidiyle koruduğudan emin olun.
Akış ve veri birimi yuvaları hakkında daha fazla bilgi için Windows Yuvaları: Arka Plan ve Windows Yuvaları: Bağlantı Noktaları ve Yuva Adresleri ve Windows Yuvaları 2 API makalelerine bakın.
CAsyncSocket::CreateEx
Windows yuvasını CreateEx
oluşturmak ve eklemek için bir yuva nesnesi oluşturduktan sonra üye işlevini çağırın.
Yuva türü gibi gelişmiş seçenekler sağlamanız gerektiğinde bu işlevi kullanın.
BOOL CreateEx(
ADDRINFOT* pAI,
long lEvent = FD_READ | FD_WRITE | FD_OOB | FD_ACCEPT | FD_CONNECT | FD_CLOSE);
Parametreler
pAI
Aile ve yuva türü gibi yuva bilgilerini tutmak için bir ADDRINFOT
işaretçi.
lEvent
Uygulamanın ilgilendiği ağ olaylarının bir bileşimini belirten bit maskesi.
FD_READ
Okumaya hazır olduğunu bildiren bir bildirim almak istiyorsunuz.FD_WRITE
Yazmaya hazır olduğunu bildiren bir bildirim almak istiyorsunuz.FD_OOB
Bant dışı verilerin geldiği bildirimini almak istiyorsunuz.FD_ACCEPT
Gelen bağlantıların bildirimini almak istiyorsunuz.FD_CONNECT
Tamamlanan bağlantının bildirimini almak istiyorsunuz.FD_CLOSE
Yuva kapatma bildirimi almak istiyorsunuz.
Dönüş Değeri
için Create()
dönüş değerine bakın.
Açıklamalar
için Create()
açıklamalara bakın.
CAsyncSocket::Detach
Veri üyesindeki tanıtıcıyı SOCKET
nesnesinden ayırmak ve olarak ayarlamak m_hSocket
için NULL
bu üye işlevini çağırınCAsyncSocket
.m_hSocket
SOCKET Detach();
CAsyncSocket::FromHandle
Bir nesnenin işaretçisini CAsyncSocket
döndürür.
static CAsyncSocket* PASCAL FromHandle(SOCKET hSocket);
Parametreler
hSocket
Bir yuvanın tutamacını içerir.
Dönüş Değeri
Bir CAsyncSocket
nesnenin işaretçisi veya NULL
öğesine eklenmiş hSocket
nesne yoksaCAsyncSocket
.
Açıklamalar
Tanıtıcı SOCKET
verildiğinde, bir CAsyncSocket
nesne tanıtıcıya bağlı değilse, üye işlevi döndürür NULL
.
CAsyncSocket::GetLastError
Başarısız olan son işlemin hata durumunu almak için bu üye işlevini çağırın.
static int PASCAL GetLastError();
Dönüş Değeri
Dönüş değeri, bu iş parçacığı tarafından gerçekleştirilen son Windows Yuvaları API yordamının hata kodunu gösterir.
Açıklamalar
Belirli bir üye işlevi bir hata oluştuğuna işaret ettiğinde, GetLastError
uygun hata kodunu almak için çağrılmalıdır. İlgili hata kodlarının listesi için tek tek üye işlev açıklamalarına bakın.
Hata kodları hakkında daha fazla bilgi için bkz . Windows Sockets 2 API.
CAsyncSocket::GetPeerName
Bu yuvanın bağlı olduğu eş yuvanın adresini almak için bu üye işlevini çağırın.
BOOL GetPeerName(
CString& rPeerAddress,
UINT& rPeerPort);
BOOL GetPeerName(
SOCKADDR* lpSockAddr,
int* lpSockAddrLen);
Parametreler
rPeerAddress
CString
Noktalı sayı IP adresi alan bir nesneye başvuru.
rPeerPort
UINT
Bağlantı noktasını depolayan bir başvuru.
lpSockAddr
Eş yuvanın SOCKADDR
adını alan yapıya yönelik bir işaretçi.
lpSockAddrLen
Adresin bayt cinsinden lpSockAddr
uzunluğuna yönelik bir işaretçi. Döndürülen bağımsız değişken, lpSockAddrLen
döndürülen gerçek boyutunu lpSockAddr
bayt cinsinden içerir.
Dönüş Değeri
İşlev başarılı olursa sıfır olmayan; aksi takdirde 0 ve belirli bir hata kodu çağrılarak GetLastError
alınabilir. Bu üye işlevi için aşağıdaki hatalar geçerlidir:
WSANOTINITIALISED
Bu API'nin kullanılması için başarılıAfxSocketInit
bir işlem gerçekleştirilmelidir.WSAENETDOWN
Windows Yuvaları uygulaması, ağ alt sisteminin başarısız olduğunu algılamıştı.WSAEFAULT
BağımsızlpSockAddrLen
değişken yeterince büyük değil.WSAEINPROGRESS
Engelleyen bir Windows Yuvaları çağrısı devam ediyor.WSAENOTCONN
Yuva bağlı değil.WSAENOTSOCK
Tanımlayıcı bir yuva değil.
Açıklamalar
IPv6 adreslerini işlemek için kullanın CAsyncSocket::GetPeerNameEx
.
CAsyncSocket::GetPeerNameEx
Bu yuvanın bağlı olduğu eş yuvanın adresini almak için bu üye işlevini çağırın (IPv6 adreslerini işler).
BOOL GetPeerNameEx(
CString& rPeerAddress,
UINT& rPeerPort);
Parametreler
rPeerAddress
CString
Noktalı sayı IP adresi alan bir nesneye başvuru.
rPeerPort
UINT
Bağlantı noktasını depolayan bir başvuru.
Dönüş Değeri
İşlev başarılı olursa sıfır olmayan; aksi takdirde 0 ve belirli bir hata kodu çağrılarak GetLastError
alınabilir. Bu üye işlevi için aşağıdaki hatalar geçerlidir:
WSANOTINITIALISED
Bu API'nin kullanılması için başarılıAfxSocketInit
bir işlem gerçekleştirilmelidir.WSAENETDOWN
Windows Yuvaları uygulaması, ağ alt sisteminin başarısız olduğunu algılamıştı.WSAEFAULT
BağımsızlpSockAddrLen
değişken yeterince büyük değil.WSAEINPROGRESS
Engelleyen bir Windows Yuvaları çağrısı devam ediyor.WSAENOTCONN
Yuva bağlı değil.WSAENOTSOCK
Tanımlayıcı bir yuva değil.
Açıklamalar
Bu işlev, CAsyncSocket::GetPeerName
IPv6 adreslerinin yanı sıra eski protokolleri de işlemesi dışında aynıdır.
CAsyncSocket::GetSockName
Yuvanın yerel adını almak için bu üye işlevini çağırın.
BOOL GetSockName(
CString& rSocketAddress,
UINT& rSocketPort);
BOOL GetSockName(
SOCKADDR* lpSockAddr,
int* lpSockAddrLen);
Parametreler
rSocketAddress
CString
Noktalı sayı IP adresi alan bir nesneye başvuru.
rSocketPort
UINT
Bağlantı noktasını depolayan bir başvuru.
lpSockAddr
Yuvanın adresini alan bir SOCKADDR
yapı işaretçisi.
lpSockAddrLen
Adresin bayt cinsinden lpSockAddr
uzunluğuna yönelik bir işaretçi.
Dönüş Değeri
İşlev başarılı olursa sıfır olmayan; aksi takdirde 0 ve belirli bir hata kodu çağrılarak GetLastError
alınabilir. Bu üye işlevi için aşağıdaki hatalar geçerlidir:
WSANOTINITIALISED
Bu API'nin kullanılması için başarılıAfxSocketInit
bir işlem gerçekleştirilmelidir.WSAENETDOWN
Windows Yuvaları uygulaması, ağ alt sisteminin başarısız olduğunu algılamıştı.WSAEFAULT
BağımsızlpSockAddrLen
değişken yeterince büyük değil.WSAEINPROGRESS
Engelleyen bir Windows Yuvaları işlemi devam ediyor.WSAENOTSOCK
Tanımlayıcı bir yuva değil.WSAEINVAL
Yuva ileBind
bir adrese bağlı değil.
Açıklamalar
Bu çağrı özellikle ilk kez yapılmadan Bind
bir Connect
çağrı yapıldığında kullanışlıdır; bu çağrı, sistem tarafından ayarlanan yerel ilişkilendirmeyi belirleyebileceğiniz tek aracı sağlar.
IPv6 adreslerini işlemek için CAsyncSocket::GetSockNameEx
CAsyncSocket::GetSockNameEx
Bir yuvanın yerel adını almak için bu üye işlevini çağırın (IPv6 adreslerini işler).
BOOL GetSockNameEx(
CString& rSocketAddress,
UINT& rSocketPort);
Parametreler
rSocketAddress
CString
Noktalı sayı IP adresi alan bir nesneye başvuru.
rSocketPort
UINT
Bağlantı noktasını depolayan bir başvuru.
Dönüş Değeri
İşlev başarılı olursa sıfır olmayan; aksi takdirde 0 ve belirli bir hata kodu çağrılarak GetLastError
alınabilir. Bu üye işlevi için aşağıdaki hatalar geçerlidir:
WSANOTINITIALISED
Bu API'nin kullanılması için başarılıAfxSocketInit
bir işlem gerçekleştirilmelidir.WSAENETDOWN
Windows Yuvaları uygulaması, ağ alt sisteminin başarısız olduğunu algılamıştı.WSAEFAULT
BağımsızlpSockAddrLen
değişken yeterince büyük değil.WSAEINPROGRESS
Engelleyen bir Windows Yuvaları işlemi devam ediyor.WSAENOTSOCK
Tanımlayıcı bir yuva değil.WSAEINVAL
Yuva ileBind
bir adrese bağlı değil.
Açıklamalar
Bu çağrı, IPv6 adreslerinin yanı sıra eski protokolleri de işlemesi dışında aynıdır CAsyncSocket::GetSockName
.
Bu çağrı özellikle ilk kez yapılmadan Bind
bir Connect
çağrı yapıldığında kullanışlıdır; bu çağrı, sistem tarafından ayarlanan yerel ilişkilendirmeyi belirleyebileceğiniz tek aracı sağlar.
CAsyncSocket::GetSockOpt
Yuva seçeneğini almak için bu üye işlevini çağır.
BOOL GetSockOpt(
int nOptionName,
void* lpOptionValue,
int* lpOptionLen,
int nLevel = SOL_SOCKET);
Parametreler
nOptionName
Değerin alınacağı yuva seçeneği.
lpOptionValue
İstenen seçeneğin değerinin döndürülacağı arabelleğe yönelik bir işaretçi. Seçili seçenekle ilişkili değer arabellekte lpOptionValue
döndürülür. ile lpOptionLen
işaret edilen tamsayı başlangıçta bu arabelleğinde bayt cinsinden boyutu içermelidir; dönüşte ise döndürülen değerin boyutuna ayarlanır. için SO_LINGER
, bu bir LINGER
yapının boyutu olacaktır; diğer tüm seçenekler için, seçeneğe bağlı olarak bool veya int
boyutu olacaktır. Açıklamalar bölümünde seçeneklerin ve bunların boyutlarının listesine bakın.
lpOptionLen
Arabellek boyutunun lpOptionValue
bayt cinsinden işaretçisi.
nLevel
Seçeneğin tanımlandığı düzey; desteklenen tek düzeyler ve'dir SOL_SOCKET
IPPROTO_TCP
.
Dönüş Değeri
İşlev başarılı olursa sıfır olmayan; aksi takdirde 0 ve belirli bir hata kodu çağrılarak GetLastError
alınabilir. Bir seçenek hiçbir zaman ile SetSockOpt
GetSockOpt
ayarlanmadıysa, seçeneğin varsayılan değerini döndürür. Bu üye işlevi için aşağıdaki hatalar geçerlidir:
WSANOTINITIALISED
Bu API'nin kullanılması için başarılıAfxSocketInit
bir işlem gerçekleştirilmelidir.WSAENETDOWN
Windows Yuvaları uygulaması, ağ alt sisteminin başarısız olduğunu algılamıştı.WSAEFAULT
BağımsızlpOptionLen
değişken geçersizdi.WSAEINPROGRESS
Engelleyen bir Windows Yuvaları işlemi devam ediyor.WSAENOPROTOOPT
Seçenek bilinmiyor veya desteklenmiyor. Özellikle,SO_BROADCAST
türündeki yuvalardaSOCK_STREAM
desteklenmezkenSO_ACCEPTCONN
, ,SO_DONTLINGER
,SO_KEEPALIVE
,SO_LINGER
veSO_OOBINLINE
türündekiSOCK_DGRAM
yuvalarda desteklenmez.WSAENOTSOCK
Tanımlayıcı bir yuva değil.
Açıklamalar
GetSockOpt
herhangi bir durumdaki herhangi bir yuva ile ilişkili yuva seçeneği için geçerli değeri alır ve sonucu içinde lpOptionValue
depolar. Seçenekler paketlerin yönlendirilmesi, bant dışı veri aktarımı gibi yuva işlemlerini etkiler.
için GetSockOpt
aşağıdaki seçenekler desteklenir. Tür, tarafından lpOptionValue
ele alınan veri türünü tanımlar. seçeneği TCP_NODELAY
düzeyi IPPROTO_TCP
kullanır; diğer tüm seçenekler düzeyi SOL_SOCKET
kullanır.
Değer | Tür | Anlamı |
---|---|---|
SO_ACCEPTCONN |
BOOL |
Yuva dinliyor. |
SO_BROADCAST |
BOOL |
Yuva, yayın iletilerinin iletimi için yapılandırılır. |
SO_DEBUG |
BOOL |
Hata ayıklama etkinleştirildi. |
SO_DONTLINGER |
BOOL |
True ise seçeneği SO_LINGER devre dışı bırakılır. |
SO_DONTROUTE |
BOOL |
Yönlendirme devre dışı bırakıldı. |
SO_ERROR |
int |
Hata durumunu alın ve temizleyin. |
SO_KEEPALIVE |
BOOL |
Canlı tutmalar gönderiliyor. |
SO_LINGER |
struct LINGER |
Geçerli kalan seçeneklerini döndürür. |
SO_OOBINLINE |
BOOL |
Bant dışı veriler normal veri akışında alınıyor. |
SO_RCVBUF |
int |
Almalar için arabellek boyutu. |
SO_REUSEADDR |
BOOL |
Yuva, zaten kullanımda olan bir adrese bağlanabilir. |
SO_SNDBUF |
int |
Gönderme için arabellek boyutu. |
SO_TYPE |
int |
Yuvanın türü (örneğin, SOCK_STREAM ). |
TCP_NODELAY |
BOOL |
Birleştirme göndermek için Nagle algoritmasını devre dışı bırakır. |
Berkeley Yazılım Dağıtımı (BSD) için desteklenmeyen GetSockOpt
seçenekler şunlardır:
Değer | Tür | Anlamı |
---|---|---|
SO_RCVLOWAT |
int |
Düşük su işareti alın. |
SO_RCVTIMEO |
int |
Alma zaman aşımı. |
SO_SNDLOWAT |
int |
Düşük su işareti gönder. |
SO_SNDTIMEO |
int |
Zaman aşımı gönderme. |
IP_OPTIONS |
IP üst bilgisindeki seçenekleri alın. | |
TCP_MAXSEG |
int |
TCP en büyük kesim boyutunu alma. |
Desteklenmeyen bir seçenekle çağrılmasıGetSockOpt
, dosyasından GetLastError
döndürülen bir hata koduyla WSAENOPROTOOPT
sonuçlanır.
CAsyncSocket::IOCtl
Yuvanın modunu denetlemek için bu üye işlevini çağırın.
BOOL IOCtl(
long lCommand,
DWORD* lpArgument);
Parametreler
lCommand
Yuvada gerçekleştirilecek komut.
lpArgument
için lCommand
bir parametre işaretçisi.
Dönüş Değeri
İşlev başarılı olursa sıfır olmayan; aksi takdirde 0 ve belirli bir hata kodu çağrılarak GetLastError
alınabilir. Bu üye işlevi için aşağıdaki hatalar geçerlidir:
WSANOTINITIALISED
Bu API'nin kullanılması için başarılıAfxSocketInit
bir işlem gerçekleştirilmelidir.WSAENETDOWN
Windows Yuvaları uygulaması, ağ alt sisteminin başarısız olduğunu algılamıştı.WSAEINVAL
lCommand
geçerli bir komut değildir veyalpArgument
içinlCommand
kabul edilebilir bir parametre değildir veya komut, sağlanan yuva türüne uygulanamaz.WSAEINPROGRESS
Engelleyen bir Windows Yuvaları işlemi devam ediyor.WSAENOTSOCK
Tanımlayıcı bir yuva değil.
Açıklamalar
Bu yordam herhangi bir durumdaki herhangi bir yuvada kullanılabilir. Protokol ve iletişim alt sisteminden bağımsız olarak yuvayla ilişkili işletim parametrelerini almak veya almak için kullanılır. Aşağıdaki komutlar desteklenir:
FIONBIO
Yuvada engelleme modunu etkinleştirin veya devre dışı bırakın.lpArgument
Parametre, engelleyici olmayan modun etkinleştirilmesi durumunda sıfır olmayan ve devre dışı bırakılacaksa sıfır olan öğesiniDWORD
gösterir. Bir yuvada verildiyseAsyncSelect
, yuvayı engelleme moduna geri ayarlamak için herhangiIOCtl
bir girişim ileWSAEINVAL
başarısız olur. Yuvayı engelleme moduna geri döndürmek ve hatayı önlemekWSAEINVAL
için, bir uygulamanın önce parametresi 0'a eşit olarak çağırarakAsyncSelect
lEvent
devre dışı bırakmasıAsyncSelect
ve ardından çağrısıIOCtl
yapması gerekir.FIONREAD
Bu yuvadan tek birReceive
çağrıyla okunabilecek en fazla bayt sayısını belirleyin. parametresi sonuculpArgument
depolayanIOCtl
öğesiniDWORD
işaret eder. Bu yuva türündeyseSOCK_STREAM
,FIONREAD
tekReceive
bir veride okunabilen toplam veri miktarını döndürür; bu normalde yuvada kuyruğa alınan toplam veri miktarıyla aynıdır. Bu yuva türündeyseSOCK_DGRAM
,FIONREAD
yuvada kuyruğa alınan ilk veri biriminin boyutunu döndürür.SIOCATMARK
Bant dışı verilerin tümünün okunup okunmadığını belirleyin. Bu yalnızca bant dışı verilerin (SO_OOBINLINE
) satır içi alımı için yapılandırılmış bir türSOCK_STREAM
yuvası için geçerlidir. Okunmayı bekleyen bant dışı veri yoksa, işlem sıfır olmayan bir değer döndürür. Aksi takdirde 0 döndürür veReceive
yuvada gerçekleştirilen sonraki veyaReceiveFrom
gerçekleştirilen , "işaret" işaretinden önceki verilerin bir kısmını veya tümünü alır; uygulama herhangi bir verininSIOCATMARK
kalıp kalmadığını belirlemek için işlemi kullanmalıdır. "Acil" (bant dışı) verilerden önce normal veriler varsa, sırayla alınır. (BirReceive
veya'nınReceiveFrom
aynı çağrıda bant dışı ve normal verileri hiçbir zaman karıştırmayacağını unutmayın.) parametresi sonuculpArgument
depolayanIOCtl
öğesiniDWORD
işaret eder.
Bu işlev, Berkeley yuvalarında kullanılan bir alt kümesidir ioctl()
. Özellikle, ile eşdeğer FIOASYNC
olan bir komut yoktur, ancak SIOCATMARK
desteklenen tek yuva düzeyi komutudur.
CAsyncSocket::Listen
Gelen bağlantı isteklerini dinlemek için bu üye işlevini çağır.
BOOL Listen(int nConnectionBacklog = 5);
Parametreler
nConnectionBacklog
Bekleyen bağlantı kuyruğunun büyüyebileceği uzunluk üst sınırı. Geçerli aralık 1 ile 5 arasındadır.
Dönüş Değeri
İşlev başarılı olursa sıfır olmayan; aksi takdirde 0 ve belirli bir hata kodu çağrılarak GetLastError
alınabilir. Bu üye işlevi için aşağıdaki hatalar geçerlidir:
WSANOTINITIALISED
Bu API'nin kullanılması için başarılıAfxSocketInit
bir işlem gerçekleştirilmelidir.WSAENETDOWN
Windows Yuvaları uygulaması, ağ alt sisteminin başarısız olduğunu algılamıştı.WSAEADDRINUSE
Kullanımdaki bir adresi dinleme girişiminde bulunuldu.WSAEINPROGRESS
Engelleyen bir Windows Yuvaları işlemi devam ediyor.WSAEINVAL
Yuva ileBind
bağlı değil veya zaten bağlı.WSAEISCONN
Yuva zaten bağlı.WSAEMFILE
Başka dosya tanımlayıcısı yok.WSAENOBUFS
Kullanılabilir arabellek alanı yok.WSAENOTSOCK
Tanımlayıcı bir yuva değil.WSAEOPNOTSUPP
Başvuruda bulunan yuva, işlemi destekleyenListen
bir türde değil.
Açıklamalar
Bağlantıları kabul etmek için yuva önce ile Create
oluşturulur, ile gelen bağlantılar için bir kapsam belirtilir Listen
ve ardından ile bağlantılar kabul edilir Accept
. Listen
yalnızca bağlantıları destekleyen yuvalara, yani türüne SOCK_STREAM
sahip yuvalara uygulanır. Bu yuva, gelen bağlantıların kabul edildiği ve işlem tarafından kabul bekleyen kuyruğa alındığı "pasif" moda alınır.
Bu işlev genellikle bir kerede birden fazla bağlantı isteğine sahip olabilecek sunucular (veya bağlantıları kabul etmek isteyen herhangi bir uygulama) tarafından kullanılır: Bir bağlantı isteği kuyruk dolu olarak gelirse, istemci göstergesiyle WSAECONNREFUSED
bir hata alır.
Listen
kullanılabilir bağlantı noktası olmadığında (tanımlayıcılar) rasyonel olarak çalışmaya devam etmeye çalışır. Kuyruk boşaltılana kadar bağlantıları kabul eder. Bağlantı noktaları kullanılabilir duruma gelirse, daha sonra veya çağrısı Listen
Accept
, mümkünse kuyruğu geçerli veya en son "kapsam"a yeniden doldurur ve gelen bağlantıları dinlemeye devam eder.
CAsyncSocket::m_hSocket
SOCKET
Bu CAsyncSocket
nesne tarafından kapsüllenen yuvanın tutamacını içerir.
SOCKET m_hSocket;
CAsyncSocket::OnAccept
Üye işlevini çağırarak bekleyen bağlantı isteklerini kabul edebildiğini bir dinleme yuvasına bildirmek için çerçeve tarafından çağrılır Accept
.
virtual void OnAccept(int nErrorCode);
Parametreler
nErrorCode
Yuvadaki en son hata. Aşağıdaki hata kodları üye işlevi için OnAccept
geçerlidir:
0 İşlev başarıyla yürütüldü.
WSAENETDOWN
Windows Yuvaları uygulaması, ağ alt sisteminin başarısız olduğunu algılamıştı.
Açıklamalar
Daha fazla bilgi için bkz . Windows Yuvaları: Yuva Bildirimleri.
CAsyncSocket::OnClose
Bu yuvaya bağlı yuvanın işlemi tarafından kapatıldığını bildirmek için çerçeve tarafından çağrılır.
virtual void OnClose(int nErrorCode);
Parametreler
nErrorCode
Yuvadaki en son hata. Üye işlevi için OnClose
aşağıdaki hata kodları geçerlidir:
0 İşlev başarıyla yürütüldü.
WSAENETDOWN
Windows Yuvaları uygulaması, ağ alt sisteminin başarısız olduğunu algılamıştı.WSAECONNRESET
Bağlantı uzak taraf tarafından sıfırlandı.WSAECONNABORTED
Zaman aşımı veya başka bir hata nedeniyle bağlantı durduruldu.
Açıklamalar
Daha fazla bilgi için bkz . Windows Yuvaları: Yuva Bildirimleri.
CAsyncSocket::OnConnect
Bu bağlantı yuvasına bağlantı girişiminin başarıyla veya hatayla tamamlandığını bildirmek için çerçeve tarafından çağrılır.
virtual void OnConnect(int nErrorCode);
Parametreler
nErrorCode
Yuvadaki en son hata. Üye işlevi için OnConnect
aşağıdaki hata kodları geçerlidir:
0 İşlev başarıyla yürütüldü.
WSAEADDRINUSE
Belirtilen adres zaten kullanılıyor.WSAEADDRNOTAVAIL
Belirtilen adres yerel makineden kullanılamıyor.WSAEAFNOSUPPORT
Belirtilen ailedeki adresler bu yuvayla kullanılamaz.WSAECONNREFUSED
Bağlanma girişimi zorla reddedildi.WSAEDESTADDRREQ
Hedef adres gereklidir.WSAEFAULT
BağımsızlpSockAddrLen
değişken yanlış.WSAEINVAL
Yuva zaten bir adrese bağlı.WSAEISCONN
Yuva zaten bağlı.WSAEMFILE
Başka dosya tanımlayıcısı yok.WSAENETUNREACH
Ağa şu anda bu konaktan ulaşılamıyor.WSAENOBUFS
Kullanılabilir arabellek alanı yok. Yuva bağlanamıyor.WSAENOTCONN
Yuva bağlı değil.WSAENOTSOCK
Tanımlayıcı bir yuva değil bir dosyadır.WSAETIMEDOUT
Bağlanma girişimi, bağlantı kurulmadan zaman aşımına uğradı.
Açıklamalar
Not
OnConnect
içinde CSocket
bildirim işlevi hiçbir zaman çağrılmaz. Bağlantılar için, bağlantı tamamlandığında (başarılı veya hatalı) döndürülecek olan öğesini çağırmanız Connect
yeterlidir. Bağlantı bildirimlerinin nasıl işlenme şekli bir MFC uygulama ayrıntısıdır.
Daha fazla bilgi için bkz . Windows Yuvaları: Yuva Bildirimleri.
Örnek
void CMyAsyncSocket::OnConnect(int nErrorCode) // CMyAsyncSocket is
// derived from CAsyncSocket
{
if (0 != nErrorCode)
{
switch (nErrorCode)
{
case WSAEADDRINUSE:
AfxMessageBox(_T("The specified address is already in use.\n"));
break;
case WSAEADDRNOTAVAIL:
AfxMessageBox(_T("The specified address is not available from ")
_T("the local machine.\n"));
break;
case WSAEAFNOSUPPORT:
AfxMessageBox(_T("Addresses in the specified family cannot be ")
_T("used with this socket.\n"));
break;
case WSAECONNREFUSED:
AfxMessageBox(_T("The attempt to connect was forcefully rejected.\n"));
break;
case WSAEDESTADDRREQ:
AfxMessageBox(_T("A destination address is required.\n"));
break;
case WSAEFAULT:
AfxMessageBox(_T("The lpSockAddrLen argument is incorrect.\n"));
break;
case WSAEINVAL:
AfxMessageBox(_T("The socket is already bound to an address.\n"));
break;
case WSAEISCONN:
AfxMessageBox(_T("The socket is already connected.\n"));
break;
case WSAEMFILE:
AfxMessageBox(_T("No more file descriptors are available.\n"));
break;
case WSAENETUNREACH:
AfxMessageBox(_T("The network cannot be reached from this host ")
_T("at this time.\n"));
break;
case WSAENOBUFS:
AfxMessageBox(_T("No buffer space is available. The socket ")
_T("cannot be connected.\n"));
break;
case WSAENOTCONN:
AfxMessageBox(_T("The socket is not connected.\n"));
break;
case WSAENOTSOCK:
AfxMessageBox(_T("The descriptor is a file, not a socket.\n"));
break;
case WSAETIMEDOUT:
AfxMessageBox(_T("The attempt to connect timed out without ")
_T("establishing a connection. \n"));
break;
default:
TCHAR szError[256];
_stprintf_s(szError, _T("OnConnect error: %d"), nErrorCode);
AfxMessageBox(szError);
break;
}
AfxMessageBox(_T("Please close the application"));
}
CAsyncSocket::OnConnect(nErrorCode);
}
CAsyncSocket::OnOutOfBandData
Alıcı yuvaya gönderilecek bant dışı veriler olduğunu bildirmek için çerçeve tarafından çağrılır.
virtual void OnOutOfBandData(int nErrorCode);
Parametreler
nErrorCode
Yuvadaki en son hata. Üye işlevi için OnOutOfBandData
aşağıdaki hata kodları geçerlidir:
0 İşlev başarıyla yürütüldü.
WSAENETDOWN
Windows Yuvaları uygulaması, ağ alt sisteminin başarısız olduğunu algılamıştı.
Açıklamalar
Bant dışı veriler, türündeki SOCK_STREAM
her bağlı yuva çiftiyle ilişkili mantıksal olarak bağımsız bir kanaldır. Kanal genellikle acil verileri göndermek için kullanılır.
MFC bant dışı verileri destekler, ancak sınıf CAsyncSocket
kullanıcılarının bunları kullanmaları önerilmez. Bunun daha kolay yolu, bu tür verileri geçirmek için ikinci bir yuva oluşturmaktır. Bant dışı veriler hakkında daha fazla bilgi için bkz . Windows Yuvaları: Yuva Bildirimleri.
CAsyncSocket::OnReceive
Bu yuvaya, arabellekte üye işlevi çağrılarak alınabilecek veriler olduğunu bildirmek için çerçeve tarafından çağrılır Receive
.
virtual void OnReceive(int nErrorCode);
Parametreler
nErrorCode
Yuvadaki en son hata. Üye işlevi için OnReceive
aşağıdaki hata kodları geçerlidir:
0 İşlev başarıyla yürütüldü.
WSAENETDOWN
Windows Yuvaları uygulaması, ağ alt sisteminin başarısız olduğunu algılamıştı.
Açıklamalar
Daha fazla bilgi için bkz . Windows Yuvaları: Yuva Bildirimleri.
Örnek
void CMyAsyncSocket::OnReceive(int nErrorCode) // CMyAsyncSocket is
// derived from CAsyncSocket
{
static int i = 0;
i++;
TCHAR buff[4096];
int nRead;
nRead = Receive(buff, 4096);
switch (nRead)
{
case 0:
Close();
break;
case SOCKET_ERROR:
if (GetLastError() != WSAEWOULDBLOCK)
{
AfxMessageBox(_T("Error occurred"));
Close();
}
break;
default:
buff[nRead] = _T('\0'); //terminate the string
CString szTemp(buff);
m_strRecv += szTemp; // m_strRecv is a CString declared
// in CMyAsyncSocket
if (szTemp.CompareNoCase(_T("bye")) == 0)
{
ShutDown();
s_eventDone.SetEvent();
}
}
CAsyncSocket::OnReceive(nErrorCode);
}
CAsyncSocket::OnSend
Artık üye işlevini çağırarak veri gönderebileceğini yuvaya bildirmek için çerçeve tarafından çağrılır Send
.
virtual void OnSend(int nErrorCode);
Parametreler
nErrorCode
Yuvadaki en son hata. Üye işlevi için OnSend
aşağıdaki hata kodları geçerlidir:
0 İşlev başarıyla yürütüldü.
WSAENETDOWN
Windows Yuvaları uygulaması, ağ alt sisteminin başarısız olduğunu algılamıştı.
Açıklamalar
Daha fazla bilgi için bkz . Windows Yuvaları: Yuva Bildirimleri.
Örnek
// CMyAsyncSocket is derived from CAsyncSocket and defines the
// following variables:
// CString m_sendBuffer; //for async send
// int m_nBytesSent;
// int m_nBytesBufferSize;
void CMyAsyncSocket::OnSend(int nErrorCode)
{
while (m_nBytesSent < m_nBytesBufferSize)
{
int dwBytes;
if ((dwBytes = Send((LPCTSTR)m_sendBuffer + m_nBytesSent,
m_nBytesBufferSize - m_nBytesSent)) == SOCKET_ERROR)
{
if (GetLastError() == WSAEWOULDBLOCK)
{
break;
}
else
{
TCHAR szError[256];
_stprintf_s(szError, _T("Server Socket failed to send: %d"),
GetLastError());
Close();
AfxMessageBox(szError);
}
}
else
{
m_nBytesSent += dwBytes;
}
}
if (m_nBytesSent == m_nBytesBufferSize)
{
m_nBytesSent = m_nBytesBufferSize = 0;
m_sendBuffer = _T("");
}
CAsyncSocket::OnSend(nErrorCode);
}
CAsyncSocket::operator =
Nesneye yeni bir CAsyncSocket
değer atar.
void operator=(const CAsyncSocket& rSrc);
Parametreler
rSrc
Var olan CAsyncSocket
bir nesneye başvuru.
Açıklamalar
Var olan CAsyncSocket
bir nesneyi başka CAsyncSocket
bir nesneye kopyalamak için bu işlevi çağır.
CAsyncSocket::operator SOCKET
Nesnenin tutamacını SOCKET
CAsyncSocket
almak için bu işleci kullanın.
operator SOCKET() const;
Dönüş Değeri
Başarılı olursa, nesnesinin SOCKET
tanıtıcısı; aksi takdirde , NULL
.
Açıklamalar
Windows API'lerini doğrudan çağırmak için tutamacı kullanabilirsiniz.
CAsyncSocket::Receive
Bir yuvadan veri almak için bu üye işlevini çağır.
virtual int Receive(
void* lpBuf,
int nBufLen,
int nFlags = 0);
Parametreler
lpBuf
Gelen veriler için bir arabellek.
nBufLen
Bayt cinsinden uzunluğu lpBuf
.
nFlags
Çağrının nasıl yapıldığını belirtir. Bu işlevin semantiği yuva seçenekleri ve nFlags
parametresi tarafından belirlenir. İkincisi, aşağıdaki değerlerden herhangi biri C++ bit düzeyinde OR işleci|
() ile birleştirilerek oluşturulur:
MSG_PEEK
Gelen verilere göz atın. Veriler arabelleğe kopyalanır ancak giriş kuyruğundan kaldırılmaz.MSG_OOB
Bant dışı verileri işleme.
Dönüş Değeri
Hata oluşmazsa, Receive
alınan bayt sayısını döndürür. Bağlantı kapatılmışsa 0 döndürür. Aksi takdirde değeri SOCKET_ERROR
döndürülür ve çağrılarak GetLastError
belirli bir hata kodu alınabilir. Bu üye işlevi için aşağıdaki hatalar geçerlidir:
WSANOTINITIALISED
Bu API'nin kullanılması için başarılıAfxSocketInit
bir işlem gerçekleştirilmelidir.WSAENETDOWN
Windows Yuvaları uygulaması, ağ alt sisteminin başarısız olduğunu algılamıştı.WSAENOTCONN
Yuva bağlı değil.WSAEINPROGRESS
Engelleyen bir Windows Yuvaları işlemi devam ediyor.WSAENOTSOCK
Tanımlayıcı bir yuva değil.WSAEOPNOTSUPP
MSG_OOB
belirtildi, ancak yuva türündeSOCK_STREAM
değil.WSAESHUTDOWN
Yuva kapatıldı; 0 veya 2 olarak ayarlanmış olarak çağrıldıktannHow
sonraShutDown
bir yuvada çağrıReceive
yapmak mümkün değildir.WSAEWOULDBLOCK
Yuva engelleyici olarak işaretlenir veReceive
işlem engellenir.WSAEMSGSIZE
Veri birimi belirtilen arabelleğe sığamayacak kadar büyük ve kesilmiş.WSAEINVAL
Yuva ileBind
bağlı değil.WSAECONNABORTED
Sanal bağlantı hattı zaman aşımı veya başka bir hata nedeniyle durduruldu.WSAECONNRESET
Sanal bağlantı hattı uzak taraf tarafından sıfırlandı.
Açıklamalar
Bu işlev bağlı akış veya veri birimi yuvaları için kullanılır ve gelen verileri okumak için kullanılır.
türündeki SOCK_STREAM
yuvalar için, sağlanan arabellek boyutuna kadar kullanılabilir durumda olduğu kadar çok bilgi döndürülür. Yuva bant dışı verilerin satır içi alımı için yapılandırılmışsa (yuva seçeneği SO_OOBINLINE
) ve bant dışı veriler okunmuyorsa, yalnızca bant dışı veriler döndürülür. Uygulama, bant dışı verilerin okunmaya devam edip etmediğini belirlemek için veya OnOutOfBandData
seçeneğini kullanabilirIOCtlSIOCATMARK
.
Veri birimi yuvaları için veriler, sağlanan arabelleğin boyutuna kadar ilk sıralanmış veri biriminden ayıklanır. Veri birimi sağlanan arabellekten büyükse, arabellek veri biriminin ilk bölümüyle doldurulur, fazla veriler kaybolur ve Receive
hata kodu olarak ayarlanmış WSAEMSGSIZE
olan değerini SOCKET_ERROR
döndürür. Yuvada kullanılabilir gelen veri yoksa hata kodu olarak ayarlanmış WSAEWOULDBLOCK
bir değeri SOCKET_ERROR
döndürülür. Geri OnReceive
çağırma işlevi, daha fazla verinin ne zaman geldiğini belirlemek için kullanılabilir.
Yuva türündeyse SOCK_STREAM
ve uzak taraf bağlantıyı düzgün bir şekilde kapattıysa, alınan 0 bayt ile hemen tamamlanır Receive
. Bağlantı sıfırlandıysa, hatasıyla Receive
WSAECONNRESET
başarısız olur.
Receive
her çağrıldığında CAsyncSocket::OnReceive
yalnızca bir kez çağrılmalıdır.
Örnek
örneğine CAsyncSocket::OnReceive
bakın.
CAsyncSocket::ReceiveFrom
Bir veri birimi almak ve kaynak adresi yapısında veya içinde rSocketAddress
depolamak için bu üye işlevini çağırınSOCKADDR
.
int ReceiveFrom(
void* lpBuf,
int nBufLen,
CString& rSocketAddress,
UINT& rSocketPort,
int nFlags = 0);
int ReceiveFrom(
void* lpBuf,
int nBufLen,
SOCKADDR* lpSockAddr,
int* lpSockAddrLen,
int nFlags = 0);
Parametreler
lpBuf
Gelen veriler için bir arabellek.
nBufLen
Bayt cinsinden uzunluğu lpBuf
.
rSocketAddress
CString
Noktalı sayı IP adresi alan bir nesneye başvuru.
rSocketPort
UINT
Bağlantı noktasını depolayan bir başvuru.
lpSockAddr
Dönüşte kaynak adresi tutan bir SOCKADDR
yapıya yönelik işaretçi.
lpSockAddrLen
Bayt cinsinden lpSockAddr
kaynak adresin uzunluğuna yönelik bir işaretçi.
nFlags
Çağrının nasıl yapıldığını belirtir. Bu işlevin semantiği yuva seçenekleri ve nFlags
parametresi tarafından belirlenir. İkincisi, aşağıdaki değerlerden herhangi biri C++ bit düzeyinde OR işleci|
() ile birleştirilerek oluşturulur:
MSG_PEEK
Gelen verilere göz atın. Veriler arabelleğe kopyalanır ancak giriş kuyruğundan kaldırılmaz.MSG_OOB
Bant dışı verileri işleme.
Dönüş Değeri
Hata oluşmazsa, ReceiveFrom
alınan bayt sayısını döndürür. Bağlantı kapatılmışsa 0 döndürür. Aksi takdirde değeri SOCKET_ERROR
döndürülür ve çağrılarak GetLastError
belirli bir hata kodu alınabilir. Bu üye işlevi için aşağıdaki hatalar geçerlidir:
WSANOTINITIALISED
Bu API'nin kullanılması için başarılıAfxSocketInit
bir işlem gerçekleştirilmelidir.WSAENETDOWN
Windows Yuvaları uygulaması, ağ alt sisteminin başarısız olduğunu algılamıştı.WSAEFAULT
lpSockAddrLen
Bağımsız değişken geçersizdi:lpSockAddr
Arabellek eş adresini barındıramayacak kadar küçük.WSAEINPROGRESS
Engelleyen bir Windows Yuvaları işlemi devam ediyor.WSAEINVAL
Yuva ileBind
bağlı değil.WSAENOTCONN
Yuva bağlı değil (SOCK_STREAM
yalnızca).WSAENOTSOCK
Tanımlayıcı bir yuva değil.WSAEOPNOTSUPP
MSG_OOB
belirtildi, ancak yuva türündeSOCK_STREAM
değil.WSAESHUTDOWN
Yuva kapatıldı; 0 veya 2 olarak ayarlanmış olarak çağrıldıktannHow
sonraShutDown
bir yuvada çağrıReceiveFrom
yapmak mümkün değildir.WSAEWOULDBLOCK
Yuva engelleyici olarak işaretlenir veReceiveFrom
işlem engellenir.WSAEMSGSIZE
Veri birimi belirtilen arabelleğe sığamayacak kadar büyük ve kesilmiş.WSAECONNABORTED
Sanal bağlantı hattı zaman aşımı veya başka bir hata nedeniyle durduruldu.WSAECONNRESET
Sanal bağlantı hattı uzak taraf tarafından sıfırlandı.
Açıklamalar
Bu işlev, (büyük olasılıkla bağlı) bir yuvadaki gelen verileri okumak ve verilerin gönderildiği adresi yakalamak için kullanılır.
IPv6 adreslerini işlemek için kullanın CAsyncSocket::ReceiveFromEx
.
türündeki SOCK_STREAM
yuvalar için, sağlanan arabellek boyutuna kadar kullanılabilir durumda olduğu kadar çok bilgi döndürülür. Yuva bant dışı verilerin satır içi alımı için yapılandırılmışsa (yuva seçeneği SO_OOBINLINE
) ve bant dışı veriler okunmuyorsa, yalnızca bant dışı veriler döndürülür. Uygulama, bant dışı verilerin okunmaya devam edip etmediğini belirlemek için veya OnOutOfBandData
seçeneğini kullanabilirIOCtlSIOCATMARK
. lpSockAddr
ve lpSockAddrLen
parametreleri yuvalar için SOCK_STREAM
yoksayılır.
Veri birimi yuvaları için veriler, sağlanan arabelleğin boyutuna kadar ilk sıralanmış veri biriminden ayıklanır. Veri birimi sağlanan arabellekten daha büyükse, arabellek iletinin ilk bölümüyle doldurulur, fazla veriler kaybolur ve ReceiveFrom
hata kodu olarak ayarlanmış WSAEMSGSIZE
olarak değerini SOCKET_ERROR
döndürür.
Sıfır değilse ve yuva türündeyse lpSockAddr
SOCK_DGRAM
, verileri gönderen yuvanın ağ adresi ilgili SOCKADDR
yapıya kopyalanır. tarafından lpSockAddrLen
işaret edilen değer, bu yapının boyutuna başlatılır ve iadede, burada depolanan adresin gerçek boyutunu gösterecek şekilde değiştirilir. Yuvada kullanılabilir gelen veri yoksa, ReceiveFrom
yuva engeli kaldırılmadığı sürece çağrı verilerin gelmesini bekler. Bu durumda hata kodu olarak ayarlanmış WSAEWOULDBLOCK
bir değeri SOCKET_ERROR
döndürülür. Geri OnReceive
arama, daha fazla verinin ne zaman geldiğini belirlemek için kullanılabilir.
Yuva türündeyse SOCK_STREAM
ve uzak taraf bağlantıyı düzgün bir şekilde kapattıysa, alınan 0 bayt ile hemen tamamlanır ReceiveFrom
.
CAsyncSocket::ReceiveFromEx
Bir veri birimi almak ve kaynak adresi yapıda veya içinde rSocketAddress
depolamak için bu üye işlevini çağırın SOCKADDR
(IPv6 adreslerini işler).
int ReceiveFromEx(
void* lpBuf,
int nBufLen,
CString& rSocketAddress,
UINT& rSocketPort,
int nFlags = 0);
Parametreler
lpBuf
Gelen veriler için bir arabellek.
nBufLen
Bayt cinsinden uzunluğu lpBuf
.
rSocketAddress
CString
Noktalı sayı IP adresi alan bir nesneye başvuru.
rSocketPort
UINT
Bağlantı noktasını depolayan bir başvuru.
nFlags
Çağrının nasıl yapıldığını belirtir. Bu işlevin semantiği yuva seçenekleri ve nFlags
parametresi tarafından belirlenir. İkincisi, aşağıdaki değerlerden herhangi biri C++ bit düzeyinde OR işleci|
() ile birleştirilerek oluşturulur:
MSG_PEEK
Gelen verilere göz atın. Veriler arabelleğe kopyalanır ancak giriş kuyruğundan kaldırılmaz.MSG_OOB
Bant dışı verileri işleme.
Dönüş Değeri
Hata oluşmazsa, ReceiveFromEx
alınan bayt sayısını döndürür. Bağlantı kapatılmışsa 0 döndürür. Aksi takdirde değeri SOCKET_ERROR
döndürülür ve çağrılarak GetLastError
belirli bir hata kodu alınabilir. Bu üye işlevi için aşağıdaki hatalar geçerlidir:
WSANOTINITIALISED
Bu API'nin kullanılması için başarılıAfxSocketInit
bir işlem gerçekleştirilmelidir.WSAENETDOWN
Windows Yuvaları uygulaması, ağ alt sisteminin başarısız olduğunu algılamıştı.WSAEFAULT
lpSockAddrLen
Bağımsız değişken geçersizdi:lpSockAddr
Arabellek eş adresini barındıramayacak kadar küçük.WSAEINPROGRESS
Engelleyen bir Windows Yuvaları işlemi devam ediyor.WSAEINVAL
Yuva ileBind
bağlı değil.WSAENOTCONN
Yuva bağlı değil (SOCK_STREAM
yalnızca).WSAENOTSOCK
Tanımlayıcı bir yuva değil.WSAEOPNOTSUPP
MSG_OOB
belirtildi, ancak yuva türündeSOCK_STREAM
değil.WSAESHUTDOWN
Yuva kapatıldı; 0 veya 2 olarak ayarlanmış olarak çağrıldıktannHow
sonraShutDown
bir yuvada çağrıReceiveFromEx
yapmak mümkün değildir.WSAEWOULDBLOCK
Yuva engelleyici olarak işaretlenir veReceiveFromEx
işlem engellenir.WSAEMSGSIZE
Veri birimi belirtilen arabelleğe sığamayacak kadar büyük ve kesilmiş.WSAECONNABORTED
Sanal bağlantı hattı zaman aşımı veya başka bir hata nedeniyle durduruldu.WSAECONNRESET
Sanal bağlantı hattı uzak taraf tarafından sıfırlandı.
Açıklamalar
Bu işlev, (büyük olasılıkla bağlı) bir yuvadaki gelen verileri okumak ve verilerin gönderildiği adresi yakalamak için kullanılır.
Bu işlev, CAsyncSocket::ReceiveFrom
IPv6 adreslerinin yanı sıra eski protokolleri de işlemesi dışında aynıdır.
türündeki SOCK_STREAM
yuvalar için, sağlanan arabellek boyutuna kadar kullanılabilir durumda olduğu kadar çok bilgi döndürülür. Yuva bant dışı verilerin satır içi alımı için yapılandırılmışsa (yuva seçeneği SO_OOBINLINE
) ve bant dışı veriler okunmuyorsa, yalnızca bant dışı veriler döndürülür. Uygulama, bant dışı verilerin okunmaya devam edip etmediğini belirlemek için veya OnOutOfBandData
seçeneğini kullanabilirIOCtlSIOCATMARK
. lpSockAddr
ve lpSockAddrLen
parametreleri yuvalar için SOCK_STREAM
yoksayılır.
Veri birimi yuvaları için veriler, sağlanan arabelleğin boyutuna kadar ilk sıralanmış veri biriminden ayıklanır. Veri birimi sağlanan arabellekten daha büyükse, arabellek iletinin ilk bölümüyle doldurulur, fazla veriler kaybolur ve ReceiveFromEx
hata kodu olarak ayarlanmış WSAEMSGSIZE
olarak değerini SOCKET_ERROR
döndürür.
Sıfır değilse ve yuva türündeyse lpSockAddr
SOCK_DGRAM
, verileri gönderen yuvanın ağ adresi ilgili SOCKADDR
yapıya kopyalanır. tarafından lpSockAddrLen
işaret edilen değer, bu yapının boyutuna başlatılır ve iadede, burada depolanan adresin gerçek boyutunu gösterecek şekilde değiştirilir. Yuvada kullanılabilir gelen veri yoksa, ReceiveFromEx
yuva engeli kaldırılmadığı sürece çağrı verilerin gelmesini bekler. Bu durumda hata kodu olarak ayarlanmış WSAEWOULDBLOCK
bir değeri SOCKET_ERROR
döndürülür. Geri OnReceive
arama, daha fazla verinin ne zaman geldiğini belirlemek için kullanılabilir.
Yuva türündeyse SOCK_STREAM
ve uzak taraf bağlantıyı düzgün bir şekilde kapattıysa, alınan 0 bayt ile hemen tamamlanır ReceiveFromEx
.
CAsyncSocket::Send
Bağlı bir yuvada veri göndermek için bu üye işlevini çağır.
virtual int Send(
const void* lpBuf,
int nBufLen,
int nFlags = 0);
Parametreler
lpBuf
İletilecek verileri içeren bir arabellek.
nBufLen
Bayt cinsinden lpBuf
verilerin uzunluğu.
nFlags
Çağrının nasıl yapıldığını belirtir. Bu işlevin semantiği yuva seçenekleri ve nFlags
parametresi tarafından belirlenir. İkincisi, aşağıdaki değerlerden herhangi biri C++ bit düzeyinde OR işleci|
() ile birleştirilerek oluşturulur:
MSG_DONTROUTE
Verilerin yönlendirmeye tabi olmaması gerektiğini belirtir. Bir Windows Yuvaları sağlayıcısı bu bayrağı yoksaymayı seçebilir.MSG_OOB
Bant dışı veri gönder (SOCK_STREAM
yalnızca).
Dönüş Değeri
Hata oluşmazsa, Send
gönderilen toplam karakter sayısını döndürür. (Bunun tarafından nBufLen
belirtilen sayıdan küçük olabileceğini unutmayın.) Aksi takdirde değeri SOCKET_ERROR
döndürülür ve çağrılarak GetLastError
belirli bir hata kodu alınabilir. Bu üye işlevi için aşağıdaki hatalar geçerlidir:
WSANOTINITIALISED
Bu API'nin kullanılması için başarılıAfxSocketInit
bir işlem gerçekleştirilmelidir.WSAENETDOWN
Windows Yuvaları uygulaması, ağ alt sisteminin başarısız olduğunu algılamıştı.WSAEACCES
İstenen adres bir yayın adresi, ancak uygun bayrak ayarlanmadı.WSAEINPROGRESS
Engelleyen bir Windows Yuvaları işlemi devam ediyor.WSAEFAULT
lpBuf
Bağımsız değişken, kullanıcı adres alanının geçerli bir bölümünde değil.WSAENETRESET
Windows Yuvaları uygulaması bağlantıyı bıraktığından bağlantı sıfırlanmalıdır.WSAENOBUFS
Windows Yuvaları uygulaması bir arabellek kilitlenmesi bildirir.WSAENOTCONN
Yuva bağlı değil.WSAENOTSOCK
Tanımlayıcı bir yuva değil.WSAEOPNOTSUPP
MSG_OOB
belirtildi, ancak yuva türündeSOCK_STREAM
değil.WSAESHUTDOWN
Yuva kapatıldı; 1 veya 2 olarak ayarlanmış olarak çağrıldıktannHow
sonraShutDown
bir yuvada çağrıSend
yapmak mümkün değildir.WSAEWOULDBLOCK
Yuva engelleyici olarak işaretlenir ve istenen işlem engellenir.WSAEMSGSIZE
Yuva türündedirSOCK_DGRAM
ve veri birimi, Windows Yuvaları uygulaması tarafından desteklenen maksimum değerden daha büyüktür.WSAEINVAL
Yuva ileBind
bağlı değil.WSAECONNABORTED
Sanal bağlantı hattı zaman aşımı veya başka bir hata nedeniyle durduruldu.WSAECONNRESET
Sanal bağlantı hattı uzak taraf tarafından sıfırlandı.
Açıklamalar
Send
bağlı akışa veya veri birimi yuvalarına giden veri yazmak için kullanılır. Veri birimi yuvaları için, tarafından AfxSocketInit
döndürülen yapıdaki WSADATA
öğesi tarafından iMaxUdpDg
verilen temel alt ağların maksimum IP paketi boyutunu aşmamaya dikkat edilmelidir. Veriler temel alınan protokolden atomik olarak geçemeyecek kadar uzunsa, hata WSAEMSGSIZE
aracılığıyla GetLastError
döndürülür ve hiçbir veri iletilmez.
Bir veri birimi yuvası için öğesinin başarıyla tamamlanmasının Send
verilerin başarıyla teslim edildiğine işaret etmediğini unutmayın.
türündeki SOCK_STREAM
nesnelerdeCAsyncSocket
, hem yerel hem de yabancı konaklardaki arabellek kullanılabilirliğine bağlı olarak, yazılan bayt sayısı 1 ile istenen uzunluk arasında olabilir.
Örnek
örneğine CAsyncSocket::OnSend
bakın.
CAsyncSocket::SendTo
Belirli bir hedefe veri göndermek için bu üye işlevini çağır.
int SendTo(
const void* lpBuf,
int nBufLen,
UINT nHostPort,
LPCTSTR lpszHostAddress = NULL,
int nFlags = 0);
int SendTo(
const void* lpBuf,
int nBufLen,
const SOCKADDR* lpSockAddr,
int nSockAddrLen,
int nFlags = 0);
Parametreler
lpBuf
İletilecek verileri içeren bir arabellek.
nBufLen
Bayt cinsinden lpBuf
verilerin uzunluğu.
nHostPort
Yuva uygulamasını tanımlayan bağlantı noktası.
lpszHostAddress
Bu nesnenin bağlandığı yuvanın ağ adresi: "ftp.microsoft.com" gibi bir makine adı veya "128.56.22.8" gibi noktalı bir sayı.
nFlags
Çağrının nasıl yapıldığını belirtir. Bu işlevin semantiği yuva seçenekleri ve nFlags
parametresi tarafından belirlenir. İkincisi, aşağıdaki değerlerden herhangi biri C++ bit düzeyinde OR işleci|
() ile birleştirilerek oluşturulur:
MSG_DONTROUTE
Verilerin yönlendirmeye tabi olmaması gerektiğini belirtir. Bir Windows Yuvaları sağlayıcısı bu bayrağı yoksaymayı seçebilir.MSG_OOB
Bant dışı veri gönder (SOCK_STREAM
yalnızca).
lpSockAddr
Hedef yuvanın adresini içeren bir SOCKADDR
yapıya yönelik işaretçi.
nSockAddrLen
Adresin bayt cinsinden lpSockAddr
uzunluğu.
Dönüş Değeri
Hata oluşmazsa, SendTo
gönderilen toplam karakter sayısını döndürür. (Bunun tarafından nBufLen
belirtilen sayıdan küçük olabileceğini unutmayın.) Aksi takdirde değeri SOCKET_ERROR
döndürülür ve çağrılarak GetLastError
belirli bir hata kodu alınabilir. Bu üye işlevi için aşağıdaki hatalar geçerlidir:
WSANOTINITIALISED
Bu API'nin kullanılması için başarılıAfxSocketInit
bir işlem gerçekleştirilmelidir.WSAENETDOWN
Windows Yuvaları uygulaması, ağ alt sisteminin başarısız olduğunu algılamıştı.WSAEACCES
İstenen adres bir yayın adresi, ancak uygun bayrak ayarlanmadı.WSAEINPROGRESS
Engelleyen bir Windows Yuvaları işlemi devam ediyor.WSAEFAULT
lpBuf
veyalpSockAddr
parametreleri kullanıcı adres alanının parçası değildir veyalpSockAddr
bağımsız değişken çok küçüktür (birSOCKADDR
yapının boyutundan daha küçüktür).WSAEINVAL
Ana bilgisayar adı geçersiz.WSAENETRESET
Windows Yuvaları uygulaması bağlantıyı bıraktığından bağlantı sıfırlanmalıdır.WSAENOBUFS
Windows Yuvaları uygulaması bir arabellek kilitlenmesi bildirir.WSAENOTCONN
Yuva bağlı değil (SOCK_STREAM
yalnızca).WSAENOTSOCK
Tanımlayıcı bir yuva değil.WSAEOPNOTSUPP
MSG_OOB
belirtildi, ancak yuva türündeSOCK_STREAM
değil.WSAESHUTDOWN
Yuva kapatıldı; 1 veya 2 olarak ayarlanmış olarak çağrıldıktannHow
sonraShutDown
bir yuvada çağrıSendTo
yapmak mümkün değildir.WSAEWOULDBLOCK
Yuva engelleyici olarak işaretlenir ve istenen işlem engellenir.WSAEMSGSIZE
Yuva türündedirSOCK_DGRAM
ve veri birimi, Windows Yuvaları uygulaması tarafından desteklenen maksimum değerden daha büyüktür.WSAECONNABORTED
Sanal bağlantı hattı zaman aşımı veya başka bir hata nedeniyle durduruldu.WSAECONNRESET
Sanal bağlantı hattı uzak taraf tarafından sıfırlandı.WSAEADDRNOTAVAIL
Belirtilen adres yerel makineden kullanılamıyor.WSAEAFNOSUPPORT
Belirtilen ailedeki adresler bu yuvayla kullanılamaz.WSAEDESTADDRREQ
Hedef adres gereklidir.WSAENETUNREACH
Ağa şu anda bu konaktan ulaşılamıyor.
Açıklamalar
SendTo
veri birimi veya akış yuvalarında kullanılır ve giden verileri yuvaya yazmak için kullanılır. Veri birimi yuvaları için, tarafından AfxSocketInit
doldurulan yapıdaki WSADATA
öğesi tarafından iMaxUdpDg
verilen temel alt ağların maksimum IP paketi boyutunu aşmamaya dikkat edilmelidir. Veriler temel alınan protokolden atomik olarak geçemeyecek kadar uzunsa, WSAEMSGSIZE hatası döndürülür ve hiçbir veri iletilmez.
öğesinin başarıyla tamamlanmasının SendTo
verilerin başarıyla teslim edildiğine işaret etmediğini unutmayın.
SendTo
yalnızca parametre tarafından tanımlanan belirli bir SOCK_DGRAM
yuvaya veri birimi göndermek için bir yuvada lpSockAddr
kullanılır.
Yayın göndermek için (yalnızca bir SOCK_DGRAM
yayında), parametredeki lpSockAddr
adres, hedeflenen bağlantı noktası numarasıyla birlikte özel IP adresi INADDR_BROADCAST
(Windows Yuvaları üst bilgi dosyasında WINSOCK.H
tanımlanır) kullanılarak oluşturulmalıdır. Veya parametresi ise lpszHostAddress
NULL
yuva yayın için yapılandırılır. Bir yayın veri biriminin parçalanmanın oluşabileceği boyutu aşması genellikle önerilmez; bu da veri biriminin veri bölümünün (üst bilgiler hariç) 512 bayt'ı aşmaması gerektiğini gösterir.
IPv6 adreslerini işlemek için kullanın CAsyncSocket::SendToEx
.
CAsyncSocket::SendToEx
Belirli bir hedefe veri göndermek için bu üye işlevini çağırın (IPv6 adreslerini işler).
int SendToEx(
const void* lpBuf,
int nBufLen,
UINT nHostPort,
LPCTSTR lpszHostAddress = NULL,
int nFlags = 0);
Parametreler
lpBuf
İletilecek verileri içeren bir arabellek.
nBufLen
Bayt cinsinden lpBuf
verilerin uzunluğu.
nHostPort
Yuva uygulamasını tanımlayan bağlantı noktası.
lpszHostAddress
Bu nesnenin bağlandığı yuvanın ağ adresi: "ftp.microsoft.com" gibi bir makine adı veya "128.56.22.8" gibi noktalı bir sayı.
nFlags
Çağrının nasıl yapıldığını belirtir. Bu işlevin semantiği yuva seçenekleri ve nFlags
parametresi tarafından belirlenir. İkincisi, aşağıdaki değerlerden herhangi biri C++ bit düzeyinde OR işleci|
() ile birleştirilerek oluşturulur:
MSG_DONTROUTE
Verilerin yönlendirmeye tabi olmaması gerektiğini belirtir. Bir Windows Yuvaları sağlayıcısı bu bayrağı yoksaymayı seçebilir.MSG_OOB
Bant dışı veri gönder (SOCK_STREAM
yalnızca).
Dönüş Değeri
Hata oluşmazsa, SendToEx
gönderilen toplam karakter sayısını döndürür. (Bunun tarafından nBufLen
belirtilen sayıdan küçük olabileceğini unutmayın.) Aksi takdirde değeri SOCKET_ERROR
döndürülür ve çağrılarak GetLastError
belirli bir hata kodu alınabilir. Bu üye işlevi için aşağıdaki hatalar geçerlidir:
WSANOTINITIALISED
Bu API'nin kullanılması için başarılıAfxSocketInit
bir işlem gerçekleştirilmelidir.WSAENETDOWN
Windows Yuvaları uygulaması, ağ alt sisteminin başarısız olduğunu algılamıştı.WSAEACCES
İstenen adres bir yayın adresi, ancak uygun bayrak ayarlanmadı.WSAEINPROGRESS
Engelleyen bir Windows Yuvaları işlemi devam ediyor.WSAEFAULT
lpBuf
veyalpSockAddr
parametreleri kullanıcı adres alanının parçası değildir veyalpSockAddr
bağımsız değişken çok küçüktür (birSOCKADDR
yapının boyutundan daha küçüktür).WSAEINVAL
Ana bilgisayar adı geçersiz.WSAENETRESET
Windows Yuvaları uygulaması bağlantıyı bıraktığından bağlantı sıfırlanmalıdır.WSAENOBUFS
Windows Yuvaları uygulaması bir arabellek kilitlenmesi bildirir.WSAENOTCONN
Yuva bağlı değil (SOCK_STREAM
yalnızca).WSAENOTSOCK
Tanımlayıcı bir yuva değil.WSAEOPNOTSUPP
MSG_OOB
belirtildi, ancak yuva türündeSOCK_STREAM
değil.WSAESHUTDOWN
Yuva kapatıldı; 1 veya 2 olarak ayarlanmış olarak çağrıldıktannHow
sonraShutDown
bir yuvada çağrıSendToEx
yapmak mümkün değildir.WSAEWOULDBLOCK
Yuva engelleyici olarak işaretlenir ve istenen işlem engellenir.WSAEMSGSIZE
Yuva türündedirSOCK_DGRAM
ve veri birimi, Windows Yuvaları uygulaması tarafından desteklenen maksimum değerden daha büyüktür.WSAECONNABORTED
Sanal bağlantı hattı zaman aşımı veya başka bir hata nedeniyle durduruldu.WSAECONNRESET
Sanal bağlantı hattı uzak taraf tarafından sıfırlandı.WSAEADDRNOTAVAIL
Belirtilen adres yerel makineden kullanılamıyor.WSAEAFNOSUPPORT
Belirtilen ailedeki adresler bu yuvayla kullanılamaz.WSAEDESTADDRREQ
Hedef adres gereklidir.WSAENETUNREACH
Ağa şu anda bu konaktan ulaşılamıyor.
Açıklamalar
Bu yöntem, CAsyncSocket::SendTo
IPv6 adreslerinin yanı sıra eski protokolleri de işlemesi dışında aynıdır.
SendToEx
veri birimi veya akış yuvalarında kullanılır ve giden verileri yuvaya yazmak için kullanılır. Veri birimi yuvaları için, tarafından AfxSocketInit
doldurulan yapıdaki WSADATA
öğesi tarafından iMaxUdpDg
verilen temel alt ağların maksimum IP paketi boyutunu aşmamaya dikkat edilmelidir. Veriler temel alınan protokolden atomik olarak geçemeyecek kadar uzunsa hata WSAEMSGSIZE
döndürülür ve hiçbir veri iletilmez.
öğesinin başarıyla tamamlanmasının SendToEx
verilerin başarıyla teslim edildiğine işaret etmediğini unutmayın.
SendToEx
yalnızca parametre tarafından tanımlanan belirli bir SOCK_DGRAM
yuvaya veri birimi göndermek için bir yuvada lpSockAddr
kullanılır.
Yayın göndermek için (yalnızca bir SOCK_DGRAM
yayında), parametredeki lpSockAddr
adres, hedeflenen bağlantı noktası numarasıyla birlikte özel IP adresi INADDR_BROADCAST
(Windows Yuvaları üst bilgi dosyasında WINSOCK.H
tanımlanır) kullanılarak oluşturulmalıdır. Veya parametresi ise lpszHostAddress
NULL
yuva yayın için yapılandırılır. Bir yayın veri biriminin parçalanmanın oluşabileceği boyutu aşması genellikle önerilmez; bu da veri biriminin veri bölümünün (üst bilgiler hariç) 512 bayt'ı aşmaması gerektiğini gösterir.
CAsyncSocket::SetSockOpt
Yuva seçeneği ayarlamak için bu üye işlevini çağır.
BOOL SetSockOpt(
int nOptionName,
const void* lpOptionValue,
int nOptionLen,
int nLevel = SOL_SOCKET);
Parametreler
nOptionName
Değerin ayarlanacağı yuva seçeneği.
lpOptionValue
İstenen seçenek için değerin sağlandığı arabelleğe yönelik bir işaretçi.
nOptionLen
Arabelleğin lpOptionValue
bayt cinsinden boyutu.
nLevel
Seçeneğin tanımlandığı düzey; desteklenen tek düzeyler ve'dir SOL_SOCKET
IPPROTO_TCP
.
Dönüş Değeri
İşlev başarılı olursa sıfır olmayan; aksi takdirde 0 ve belirli bir hata kodu çağrılarak GetLastError
alınabilir. Bu üye işlevi için aşağıdaki hatalar geçerlidir:
WSANOTINITIALISED
Bu API'nin kullanılması için başarılıAfxSocketInit
bir işlem gerçekleştirilmelidir.WSAENETDOWN
Windows Yuvaları uygulaması, ağ alt sisteminin başarısız olduğunu algılamıştı.WSAEFAULT
lpOptionValue
işlem adres alanının geçerli bir bölümünde değil.WSAEINPROGRESS
Engelleyen bir Windows Yuvaları işlemi devam ediyor.WSAEINVAL
nLevel
geçerli değil veya içindekilpOptionValue
bilgiler geçerli değil.WSAENETRESET
Bağlantı ayarlandığında zaman aşımınaSO_KEEPALIVE
uğradı.WSAENOPROTOOPT
Seçenek bilinmiyor veya desteklenmiyor. Özellikle,SO_BROADCAST
türündeki yuvalardaSOCK_STREAM
desteklenmezkenSO_DONTLINGER
,SO_KEEPALIVE
,SO_LINGER
veSO_OOBINLINE
türündekiSOCK_DGRAM
yuvalarda desteklenmez.WSAENOTCONN
Bağlantı ayarlandığında sıfırlandıSO_KEEPALIVE
.WSAENOTSOCK
Tanımlayıcı bir yuva değil.
Açıklamalar
SetSockOpt
, herhangi bir durumdaki herhangi bir türde yuvayla ilişkili yuva seçeneği için geçerli değeri ayarlar. Seçenekler birden çok protokol düzeyinde mevcut olsa da, bu belirtim yalnızca en üstteki "yuva" düzeyinde bulunan seçenekleri tanımlar. Seçenekler, normal veri akışında hızlandırılmış verilerin alınıp alınmadığı, yayın iletilerinin yuvaya gönderilip gönderilemeyeceği gibi yuva işlemlerini etkiler.
İki tür yuva seçeneği vardır: Bir özelliği veya davranışı etkinleştiren veya devre dışı bırakabilen Boole seçenekleri ve tamsayı değeri veya yapısı gerektiren seçenekler. Boole seçeneğini etkinleştirmek için sıfır lpOptionValue
olmayan bir tamsayıya işaret edin. Seçeneğini lpOptionValue
devre dışı bırakmak için sıfıra eşit bir tamsayıya işaret edin. nOptionLen
Boole seçenekleri için sizeof(BOOL)
eşit olmalıdır. Diğer seçenekler için, lpOptionValue
seçenek için istenen değeri içeren tamsayıyı veya yapıyı gösterir ve nOptionLen
tamsayı veya yapının uzunluğudur.
SO_LINGER
, bir yuvada kaydedilmemiş veriler kuyruğa alındığında ve yuvayı Close
kapatmak için işlev çağrıldığında gerçekleştirilen eylemi denetler.
Varsayılan olarak, yuva zaten kullanımda olan bir yerel adrese bağlanamaz (bkz Bind
. ). Ancak bazen, bir adresi bu şekilde "yeniden kullanmak" tercih edilebilir. Her bağlantı yerel ve uzak adreslerin birleşimiyle benzersiz olarak tanımlandığından, uzak adresler farklı olduğu sürece aynı yerel adrese bağlı iki yuva olması sorun olmaz.
İstenen adres zaten başka bir yuva tarafından kullanıldığından, Bir yuvadaki bir Bind
çağrıya izin verilmemesi gerektiğini Windows Yuvaları uygulamasına bildirmek için, uygulamanın çağrıyı vermeden önce yuva için yuva seçeneğini ayarlaması SO_REUSEADDR
Bind
gerekir. Seçeneğin yalnızca çağrı sırasında Bind
yorumlandığını unutmayın: Bu nedenle, mevcut bir adrese bağlı olmayan bir yuvada seçeneği ayarlamak ve çağrının bu veya başka bir yuva üzerinde hiçbir etkisi olmadan seçeneği Bind
ayarlamak veya sıfırlamak gereksizdir (ancak zararsızdır).
Bir uygulama, Windows Yuvaları uygulamasının yuva seçeneğini açarak İletim Denetimi Protokolü (TCP) bağlantılarında "etkin tutma" paketlerinin kullanımını etkinleştirmesini SO_KEEPALIVE
isteyebilir. Windows Yuvaları uygulamasının canlı tutma kullanımını desteklemesi gerekmez: bu durumda, hassas semantik uygulamaya özgü olur ancak RFC 1122'nin 4.2.3.6 bölümüne uygun olmalıdır: "İnternet Konakları gereksinimleri — İletişim Katmanları." "Canlı tutma" sonucu bir bağlantı bırakılırsa, hata kodu WSAENETRESET
yuvada devam eden tüm çağrılara döndürülür ve sonraki çağrılar ile WSAENOTCONN
başarısız olur.
seçeneği TCP_NODELAY
Nagle algoritmasını devre dışı bırakır. Nagle algoritması, tam boyutlu bir paket gönderilinceye kadar bilinmeyen gönderme verilerini arabelleğe alarak bir konak tarafından gönderilen küçük paketlerin sayısını azaltmak için kullanılır. Ancak bazı uygulamalarda bu algoritma performansı engelleyebilir ve TCP_NODELAY
kapatmak için kullanılabilir. Ayarın ağ performansı üzerinde önemli bir olumsuz etkisi olabileceğinden, bunu yapmanın etkisi iyi anlaşılmadığı ve istenmediği sürece uygulama TCP_NODELAY
yazıcıları ayarlanmamalıdırTCP_NODELAY
. TCP_NODELAY
düzeyi IPPROTO_TCP
kullanan desteklenen tek yuva seçeneğidir; diğer tüm seçenekler düzeyi SOL_SOCKET
kullanır.
Bazı Windows Yuvaları uygulamaları, seçenek bir uygulama tarafından ayarlandıysa SO_DEBUG
çıkış hata ayıklama bilgileri sağlar.
için SetSockOpt
aşağıdaki seçenekler desteklenir. Tür, tarafından lpOptionValue
ele alınan veri türünü tanımlar.
Değer | Tür | Anlamı |
---|---|---|
SO_BROADCAST |
BOOL |
Yuvada yayın iletilerinin iletimine izin verin. |
SO_DEBUG |
BOOL |
Hata ayıklama bilgilerini kaydedin. |
SO_DONTLINGER |
BOOL |
Gönderilmemiş verilerin gönderilmesini beklemeyi engellemeyin Close . Bu seçeneğin ayarlanması, sıfır olarak ayarlanmış ayara SO_LINGER l_onoff eşdeğerdir. |
SO_DONTROUTE |
BOOL |
Yönlendirmeyin: doğrudan arabirime gönderin. |
SO_KEEPALIVE |
BOOL |
Canlı tutma gönder. |
SO_LINGER |
struct LINGER |
Close Kaydedilmemiş veriler varsa oyalanır. |
SO_OOBINLINE |
BOOL |
Normal veri akışında bant dışı verileri alma. |
SO_RCVBUF |
int |
Almalar için arabellek boyutunu belirtin. |
SO_REUSEADDR |
BOOL |
Yuvanın zaten kullanımda olan bir adrese bağlanmasına izin verin. (Bkz. Bağlama.) |
SO_SNDBUF |
int |
Göndermeler için arabellek boyutunu belirtin. |
TCP_NODELAY |
BOOL |
Birleştirme göndermek için Nagle algoritmasını devre dışı bırakır. |
Berkeley Yazılım Dağıtımı (BSD) için desteklenmeyen SetSockOpt
seçenekler şunlardır:
Değer | Tür | Anlamı |
---|---|---|
SO_ACCEPTCONN |
BOOL |
Yuva dinliyor |
SO_ERROR |
int |
Hata durumunu alın ve temizleyin. |
SO_RCVLOWAT |
int |
Düşük su işareti alın. |
SO_RCVTIMEO |
int |
Alma zaman aşımı |
SO_SNDLOWAT |
int |
Düşük su işareti gönder. |
SO_SNDTIMEO |
int |
Zaman aşımı gönderme. |
SO_TYPE |
int |
Yuvanın türü. |
IP_OPTIONS |
IP üst bilgisinde seçenekler alanını ayarlayın. |
CAsyncSocket::ShutDown
Yuvada göndermeleri, almaları veya her ikisini de devre dışı bırakmak için bu üye işlevini çağırın.
BOOL ShutDown(int nHow = sends);
Parametreler
nHow
Aşağıdaki numaralandırılmış değerleri kullanarak artık hangi işlem türlerine izin verileceğini açıklayan bir bayrak:
receives = 0
sends = 1
both = 2
Dönüş Değeri
İşlev başarılı olursa sıfır olmayan; aksi takdirde 0 ve belirli bir hata kodu çağrılarak GetLastError
alınabilir. Bu üye işlevi için aşağıdaki hatalar geçerlidir:
WSANOTINITIALISED
Bu API'nin kullanılması için başarılıAfxSocketInit
bir işlem gerçekleştirilmelidir.WSAENETDOWN
Windows Yuvaları uygulaması, ağ alt sisteminin başarısız olduğunu algılamıştı.WSAEINVAL
nHow
geçerli değil.WSAEINPROGRESS
Engelleyen bir Windows Yuvaları işlemi devam ediyor.WSAENOTCONN
Yuva bağlı değil (SOCK_STREAM
yalnızca).WSAENOTSOCK
Tanımlayıcı bir yuva değil.
Açıklamalar
ShutDown
her türlü sokette alımı, iletimi veya her ikisini devre dışı bırakmak için kullanılır. 0 ise nHow
, yuvada sonraki alma işlemlerine izin verilmez. Bunun alt protokol katmanları üzerinde hiçbir etkisi yoktur.
İletim Denetimi Protokolü (TCP) için TCP penceresi değiştirilmez ve pencere tükenene kadar gelen veriler kabul edilir (ancak onaylanmaz). Kullanıcı Veri Birimi Protokolü (UDP) için gelen veri birimleri kabul edilir ve kuyruğa alınır. Hiçbir durumda bir ICMP hata paketi oluşturulmaz. 1 ise nHow
, sonraki göndermelere izin verilmez. TCP yuvaları için bir FIN gönderilir. 2 ayarı nHow
, yukarıda açıklandığı gibi hem gönderme hem de almaları devre dışı bırakır.
ShutDown
Yuvayı kapatmadığını ve yuvaya bağlı kaynakların çağrılana kadar Close
serbest edilmeyeceğini unutmayın. Bir uygulama kapatıldıktan sonra yuvayı yeniden kullanabilmeye güvenmemelidir. Özellikle, böyle bir yuvada kullanımını Connect
desteklemek için bir Windows Yuvaları uygulaması gerekli değildir.
Örnek
örneğine CAsyncSocket::OnReceive
bakın.
CASyncSocket::Socket
Bir yuva tutamacı ayırır.
BOOL Socket(
int nSocketType = SOCK_STREAM,
long lEvent = FD_READ | FD_WRITE | FD_OOB | FD_ACCEPT | FD_CONNECT | FD_CLOSE,
int nProtocolType = 0,
int nAddressFormat = PF_INET);
Parametreler
nSocketType
veya SOCK_DGRAM
belirtirSOCK_STREAM
.
lEvent
Uygulamanın ilgilendiği ağ olaylarının bir bileşimini belirten bit maskesi.
FD_READ
: Okumaya hazır olduğunu bildiren bir bildirim almak istiyorsunuz.FD_WRITE
: Yazmaya hazır olduğunu bildiren bir bildirim almak istiyorsunuz.FD_OOB
: Bant dışı verilerin geldiği bildirimini almak istiyorsunuz.FD_ACCEPT
: Gelen bağlantıların bildirimini almak istiyorsunuz.FD_CONNECT
: Tamamlanan bağlantının bildirimini almak istiyorsunuz.FD_CLOSE
: Yuva kapatma bildirimini almak istiyorsunuz.
nProtocolType
Belirtilen adres ailesine özgü yuvayla kullanılacak protokol.
nAddressFormat
Aile belirtimlerini ele alın.
Dönüş Değeri
Başarılı olduğunda, FALSE
başarısız olduğunda döndürürTRUE
.
Açıklamalar
Bu yöntem bir yuva tutamacı ayırır. Yuvayı belirtilen bir adrese bağlamak için çağrı CAsyncSocket::Bind
yapmaz, bu nedenle yuvayı belirtilen bir adrese bağlamak için daha sonra aramanız Bind
gerekir. Bağlamadan önce yuva seçeneğini ayarlamak için kullanabilirsiniz CAsyncSocket::SetSockOpt
.
Ayrıca bkz.
CObject
Sınıf
Hiyerarşi Grafiği
CSocket
Sınıf
CSocketFile
Sınıf