| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657 |
- // +build windows
- package goselect
- import "syscall"
- const FD_SETSIZE = 64
- // FDSet extracted from mingw libs source code
- type FDSet struct {
- fd_count uint
- fd_array [FD_SETSIZE]uintptr
- }
- // Set adds the fd to the set
- func (fds *FDSet) Set(fd uintptr) {
- var i uint
- for i = 0; i < fds.fd_count; i++ {
- if fds.fd_array[i] == fd {
- break
- }
- }
- if i == fds.fd_count {
- if fds.fd_count < FD_SETSIZE {
- fds.fd_array[i] = fd
- fds.fd_count++
- }
- }
- }
- // Clear remove the fd from the set
- func (fds *FDSet) Clear(fd uintptr) {
- var i uint
- for i = 0; i < fds.fd_count; i++ {
- if fds.fd_array[i] == fd {
- for i < fds.fd_count-1 {
- fds.fd_array[i] = fds.fd_array[i+1]
- i++
- }
- fds.fd_count--
- break
- }
- }
- }
- // IsSet check if the given fd is set
- func (fds *FDSet) IsSet(fd uintptr) bool {
- if isset, err := __WSAFDIsSet(syscall.Handle(fd), fds); err == nil && isset != 0 {
- return true
- }
- return false
- }
- // Zero empties the Set
- func (fds *FDSet) Zero() {
- fds.fd_count = 0
- }
|