Windows'dan pek hoşlandığım söylenemez bu yüzden de bu belgeyi okuyan
tüm Windows programcılarını GNU/Linux, BSD ya da UNIX denemeye davet
ediyorum. Bu laflardan sonra, evet, örnek kodları Windows üzerinde
kullanma imkanınız var.
Öncelikle burada bahsettiğim birçok sistem başlık dosyasını unutun.
Tek yapmanız gereken aşağıdakileri programınıza katmak:
Bir dakika! Aynı zamanda WSAStartup() işlevini de
soket kitaplıkları ile herhangi bir iş yapmadan önce çağırmanız gerekiyor.
Bunu yapmak için gerekli kod şöyle bir şey:
#include <winsock.h>
{
WSADATA wsaData; // if this doesn't work
//WSAData wsaData; // then try this instead
if (WSAStartup(MAKEWORD(1, 1), &wsaData) != 0) {
fprintf(stderr, "WSAStartup failed.\n");
exit(1);
}
Tabii derleyicinize Winsock'u da bağlamasını söylemelisiniz. Bunun için
gerekli dosyanın ismi genellikle şudur: wsock32.lib
veya winsock32.lib veya benzer bir şey. VC++
ortamında iseniz, bunun için Project menüsünden,
Settings... kısmına gidin ve Link
sekmesine gelip Object/library modules kutusunu bulun.
wsock32.lib dosyasını bu listeye ekleyin.
En azından ben böyle duydum.
Ve son olarak da WSACleanup() işlevini çağırmanız
gerekir soket kitaplığı ile işiniz bittiğinde. Ayrıntılı bilgi için
derleyicinizin yardım belgelerine bakın.
Bunu yaptığınızda bu belgedeki örneklerin hemen hepsi genel olarak
çalışabilir durumda olmalı belki birkaç küçük değişiklik yapmanız
gerekebilir ama hepsi bu. Dikkat etmeniz gerekenler: Soketi kapatmak
için close() işlevini kullanamazsınız -- bunun
için closesocket() işlevini kullanmalısınız.
Ayrıca select() işlevi sadece soket tanımlayıcılar
içindir, dosya tanımlayıcılar (standart girdi için 0 kullanılması gibi)
için değildir.
Aynı zamanda, CSocket isimli bir soket sınıfı da mevcuttur.
Ayrıntılı bilgi için derleyicinizin belgelerini karıştırın.
Winsock hakkında ayrıntılı bilgi için şu adrese bakabilirsiniz:
Winsock FAQ
Son olarak da bildiğim kadarı ile Windows ortamında fork()
isimli işlev yok ve maalesef örneklerde bu işlevi kullanmak durumdayım.
Belki de bir POSIX kitaplığına programınızı bağlamanız gerekebilir veya
CreateProcess() işlevini kullanabilirsiniz.
fork() işlevi herhangi bir argüman almaz ama
CreateProcess() işlevi 48 milyar argüman alır.
Eğer bu gözünüzü biraz korkuttu ise CreateThread()
işlevi biraz daha kolay bir alternatif olabilir ancak "multithreading"
tartışması bu belgenin sınırlarının ötesindedir. Windows konusunu böylece
burada kapatıyoruz!