Frequently Asked Questions About Windows Sockets Version 1.1 08 Dec 1993 This FAQ has been put together by Mark Towfiq, with much-appreciated assistance from Jay Allard, Bruce Backman, Paul Brooks, Martin Hall, Simon Hewison, Mike Morse, Bob Quinn, Ed Schwalenberg, Bill Tang, Dave Treadwell, and Fred Whiteside. If you have any modifications to this FAQ, send them to towfiq@East.Sun.Com, and I will fold them into the next revision. First of all, the questions: 1. What is Windows Sockets? 2. What is the latest version? 3. When is the next rev of the specification? Why not sooner? 4. Where can I get a/the WINSOCK.DLL? 5. Why isn't there just one WINSOCK.DLL? Do I need a TCP/IP already to use it? 6. Where can I contact Windows Sockets application and implementation vendors? (include list of address, phone contacts) 7. Where can I get sample apps and tests? 8. Will Windows Sockets be in _____? 8.1. Will Windows Sockets be in Windows NT? 8.2. Will Windows Sockets be in Windows for Workgroups? 8.3. Will Windows Sockets be in DOS? 8.4. Will Windows Sockets be in Unix? 8.5. Will Windows Sockets be in Win32s? 9. What about standard APIs for ____? 9.1. What about standard APIs for FTP? 9.2. What about standard APIs for Telnet? 9.3. What about standard APIs for SNMP? 9.4. What about standard APIs for RPC? 9.5. What about standard APIs for TLI/XTI? 10.1. Does Windows Sockets work over protocols other than TCP/IP? 10.2. Will it? 11. Why no SOCK_RAW? 12. Why isn't it possible to share sockets between tasks? 13.1. How do I get my IP address? 13.2. Why no SIOCGIFADDR? 14. When should I use blocking vs. nonblocking sockets? 15. What about other socket options that BSD supports? Ioctls? 16. How can I get the local username? 17. Do I need to initialize the WSAData structure before calling WSAStartup? 18. If I write a Windows Sockets program for DOS, will I be able to communicate with a Sockets program on UNIX? 19. Is it possible to create sockets that map to a dll rather than an application? I have tried a WSAStartup() as part of my LibMain, but the sockets that are created are owned by the application, not by the DLL. It would be desirable for me to have some of the sockets that are opened have "A Global (DLL wide) Scope". 20. A *Class* of questions that could be answered are related to porting extant BSD applications to Windows Sockets: "How to I implement the xxxx function call in my Windows Sockets application?" (e.g. fcntl(), readv(), etc). 21. Is there a Pascal/Visual Basic/Visual Cobol header file for Windows Sockets? ---------------------------------------------------------------------- 1. What is Windows Sockets? Answer: The Windows Sockets specification defines a network programming interface for Microsoft Windows which is based on the "socket" paradigm popularized in the Berkeley Software Distribution (BSD) from the University of California at Berkeley. It encompasses both familiar Berkeley socket style routines and a set of Windows-specific extensions designed to allow the programmer to take advantage of the message-driven nature of Windows. The Windows Sockets Specification is intended to provide a single API to which application developers can program and multiple network software vendors can conform. Furthermore, in the context of a particular version of Microsoft Windows, it defines a binary interface (ABI) such that an application written to the Windows Sockets API can work with a conformant protocol implementation from any network software vendor. This specification thus defines the library calls and associated semantics to which an application developer can program and which a network software vendor can implement. Network software which conforms to this Windows Sockets specification will be considered "Windows Sockets Compliant". Suppliers of interfaces which are "Windows Sockets Compliant" shall be referred to as "Windows Sockets Suppliers". To be Windows Sockets Compliant, a vendor must implement 100% of this Windows Sockets specification. Applications which are capable of operating with any "Windows Sockets Compliant" protocol implementation will be considered as having a "Windows Sockets Interface" and will be referred to as "Windows Sockets Applications". 2. What is the latest version? Answer: The latest version of the specification is 1.1. 3. When is the next rev of the specification? Why not sooner? Answer: The next rev. (2.0) will not be until towards the end of 1993. We need 1.1 of the API to become firmly settled and implemented first. 4. Where can I get a/the WINSOCK.DLL? Answer: You can most probably get one from the same place you got your TCP/IP software from. 5. Why isn't there just one WINSOCK.DLL? Do I need a TCP/IP already to use it? Answer: The Windows Sockets specification defines the top level of the DLL, the part which is called by user programs. The method a given WINSOCK.DLL will use to access TCP/IP (or NetWare, or AppleTalk, or DECNet ...) depends on the networking package you have installed, and therefore must vary. A WINSOCK.DLL is therefore just an interface to whatever existing protocol you already have installed. An illustration would help: +---------------------------------+ | WinSock compliant application | +---------------------------------+ +---------------------------------+ <--- WinSock API | Windows Sockets DLL | +---------------------------------+ +---------------------------------+ <--- Protocol Stack API | Protocol Stack (e.g. TCP/IP) | (typically proprietary) +---------------------------------+ +---------------------------------+ <--- Hardware Driver API | Hardware Driver | (Packet Driver, NDIS, ODI, +---------------------------------+ or proprietary) +---------------------------------+ <--- Hardware Interface | Network (hardware) Interface | (hardware specific) +---------------------------------+ | +----> network 6. Where can I contact Windows Sockets application and implementation vendors? (include list of address, phone contacts) Answer: Date: Tue, 6 Apr 93 12:53:37 PDT From: tang@documentum.com (Bill Tang) To: winsock@Microdyne.COM Subject: vendor list (long) Thanks to all that responded to my previous inquiry of vendor implementations. I am posing a summary and will keep the list updated if I receive more information. ------------------------------------------------------------------------- SUMMARY ------------------------------------------------------------------------- (old list at 11/23/92) Company BETA FINAL Update (4/6/93) ------------------------------------------------------------------------- 3Com Corp Q1'93 Q2'93 ? Beame & Whiteside Q2'93 Shipping Shipping v1.1 DLL with stack Distinct Corp Q3'92 Shipping ? FTP Software Q4'92 Shipping shipping v1.1 TCP/IP stack with DLL; DLL available on BBS or anonymous-ftpable on vax.ftp.com; Development Kit being updated to include v1.1 Windows Sockets support. Frontier Tech Q3'92 Shipping ? IBM Q4'92 Q1'92 ? JSB Corporation Q4'92 Q4'92 ? Lan Design Q4'92 Q1'93 ? Lanera Corp Shipping v1.1 TCP/IP stack Microdyne Q4'92 Q1'93 ? Microsoft(W NT 32b) Q3'92 Q2'93 Win32 SDK March release Microsoft(W NT 16b) Q4'92 Q2'93 Win32 SDK March release Microsoft(W 3.x 16b) Q4'92 Q2'93 ? NetManage Q4'92 Q4'92 shipping v1.1 DLL Network Research ? ? ? Novell ? ? ? Spry (stack) supports Winsock v1.1 Sun Microsystems Q4'92 1stHalf'93 ? Ungermann Bass ? ? v1.1 TCP/IP stack and DLL: Beta Q1'93, Final Q2'93 Walker Richer Quinn Q4'92 Q1'93 ? Wollongong Q4'92 Q1'93 ? 7. Where can I get sample applications and tests? Answer: Files and information related to the Windows Sockets API are available via FTP (user: "anonymous", password: your e-mail address) on the host SunSite.UNC.EDU, in /pub/micro/pc-stuff/ms-windows/winsock. Note: if you do not have FTP access to the Internet, send a message with the word "help" in the body to either ftpmail@SunSite.UNC.Edu, or ftpmail@DECWRL.DEC.Com (in the UK mail to ftpmail@doc.ic.ac.uk), to obtain information about the FTP to Mail service there. 8. Will Windows Sockets be in _____? 8.1. Will Windows Sockets be in Windows NT? Answer: Yes. In 16 and 32-bit versions. 8.2. Will Windows Sockets be in Windows for Workgroups? Answer: Yes. 8.3. Will Windows Sockets be in DOS? Answer: Paul Brooks of TurboSoft (paul@abccomp.oz.au) tells me: As for a Windows Sockets for DOS - we have a library that is pretty much complete. The goal was to produce a DOS library and Binary API which would allow developers to code applications using the Windows Sockets 1.1 spec. and have it run exactly the same under DOS as Windows - blocking and non-blocking modes, Asynchronous calls, the works. Apart from some AsyncGetXXXbyYYY calls the rest works, although it is not possible to capture all the Windows-specific semantics of some areas. I am sure you can contact him for more information. JSB also has a standardized Berkeley Sockets API for DOS which provides access to all TCP/IP implementations. 8.4. Will Windows Sockets be in UNIX? Answer: Well, since it came from BSD UNIX, there's not much need. 8.5. Will Windows Sockets be in Win32-S? Answer: Yes, Win32s 1.1 contains a thunking layer that converts 32-bit Windows Sockets calls to 16-bit Windows Sockets. It should work on top of any 16-bit WINSOCK.DLL. 9. What about standard APIs for ____? 9.1. What about standard APIs for FTP? Answer: Not yet. 9.2 What about standard APIs for Telnet? Answer: Not yet. 9.3 What about standard APIs for SNMP? Answer: In the works. Send e-mail to listserv@SunSite.UNC.EDU with "subscribe winsnmp" in the body of the message to join the list. 9.4 What about standard APIs for RPC? Answer: Microsoft will be providing an implementation of DCE RPC. Also in the works is the definition of a standard implementation of ONC RPC (known as RPC for Windows) which will be made available by multiple vendors. To contribute to the discussion, send email to rpc4win@wco.ftp.com. 9.5 What about standard APIs for TLI/XTI? Answer: No, not yet. Vendors chose to do Windows Sockets because of the sockets application and knowledge base, however anyone out there is free to try a Windows TLI/XTI Specification. 10.1. Does Windows Sockets work over protocols other than TCP/IP? Answer: Yes, it does. But we know of no vendors supplying one currently. 10.2. Will it? Answer: Yes. Windows NT will include mechanisms for multiple protocol support in Windows Sockets, both 32-bit and 16-bit. 11. Why no SOCK_RAW? Answer: SOCK_RAW is optionally implemented by many major Windows Sockets vendors. It is not mandated now because: 1) not every stack vendor can supply a complete SOCK_RAW interface, and 2) we did not have time to define the minimal subset every vendor could provide (e.g. maybe just ICMP). 12. Why isn't it possible to share sockets between tasks? Answer: The real answer is that it wasn't considered sufficiently important for 1.1, but is high on the list for inclusion in 2.0. 13.1. How do I get my IP address? Answer: Do a gethostbyname() on the output from gethostname(). 13.2. Why no SIOCGIFADDR? Answer: It was not included because there were concerns it could not be supported across platforms. It may be included in version 2.0 of the spec. 14. When should I use blocking vs. non-blocking sockets? Answer: Try to use non-blocking sockets whenever possible; certainly if you are coding a Windows application from scratch. Blocking sockets should only be used when trying to maintain portability between UNIX/MS-DOS and Windows. 15. What about other socket options that BSD supports? Ioctls? Answer: Some vendors may support them. Do not rely on ones not explicitly mentioned in the specification, however. 16. How can I get the local username? Answer: Based on a suggestion from Simon Hewison (p0063886@cs3.oxford-brookes.ac.uk), one idea is to call WNetGetUser() in the NETWORK.DRV. If a vendor has supplied a NETWORK.DRV then this will work, if not you can just use some other method. Thus you could write a bit of code thus: WNetGetUser(szNetUserId,sizeof(szNetUserId); if (strlen(szNetUserId)==0) { /* call some other method of getting userid, eg. the lan manager call NetWkstaGetInfo */ } Information on this API call is in the Windows Device Driver Adaption Guide. 17. Do I need to initialize the WSAData structure before calling WSAStartup? Answer: No, WSAStartup does not retrieve the contents of the WSAData structure pointed to, it fills it in. 18. If I write a Windows Sockets program, will I be able to communicate with a Sockets program on UNIX or any other non Windows platform? Answer: Absolutely! This common question is the result of confusing protocols with the APIs; communicating programs need not have been created with the same APIs, as long as they are using the same (transport & network) protocols. 19. Is it possible to create sockets that map to a dll rather than an application? I have tried a WSAStartup() as part of my LibMain, but the sockets that are created are owned by the application, not by the DLL. It would be desirable for me to have some of the sockets that are opened have "A Global (DLL wide) Scope". Answer: The way this situation has been dealt with by developers is to have your DLL create a "helper process" which will perform all Windows Sockets operations on behalf of your applications (thereby having all sockets owned by the helper process' task). 20. A *Class* of questions that could be answered are related to porting extant BSD applications to Windows Sockets: "How to I implement the xxxx function call in my Windows Sockets application?" (e.g. fcntl(), readv(), etc). Answer: In general, you will have to code such functions yourself, although it would not hurt to suggest them for the next revision of the specification as well. 21. Is there a Pascal/Visual Basic/Visual Cobol header file for Windows Sockets? Answer: The Pascal and Visual Basic forms are already in the FTP archive. Look there for any other header files that people may have developed so far. It should be pointed out that not all the Winsock functions can be called from Visual Basic and the subset that can be called are not really enough for a true app (for example, you can't call gethostbyname()). To use Winsock from VB requires a translation DLL that will probably have to be written in C. To date, there is no public domain implementation, although several vendors have announced toolkits for Winsock for VB.