В процессе портирования сетевой подсистемы в Miraculix OS, возникло пару вопросов.
Почему не используется процедура закрытия сокетов, при завершении процесса - socket_process_end?
Кроме того, обратил внимание, что поиск номера свободного сокета в socket_alloc, идет не с начала, а начиная с последнего.
socket_process_end
Re: socket_process_end
Буду открывать по мере готовности. На данный момент открыл исходники новых программ на С (ipconfig, ping, taskmgr, wget, http-server), mx32.asm (ring3 API), и исходный код ядра kernel.asm
Выложил на свой сайт и на github
На счет лицензии еще подумаю.
Выложил на свой сайт и на github
На счет лицензии еще подумаю.
Re: socket_process_end
Касательно сетевого стека сказать не могу. Он не полностью реализован. Да и работает тоже не очень. Вы не думали портировать lwIP к себе?
Изобретайте колёса каждый раз, когда хотите написать новую программу.
Re: socket_process_end
Я подумал проще портировать стек из KolibriOS, т.к тоже на FASM'e. На счет lwIP надо подумать.. В принципе, его можно дорабатывть по мере необходимости. Критичный для меня функционал я уже доработал.
И считаю, что его уже достаточно для создания сетевых приложений, например - мессенджера.
А касательно работы стека да... глюков к сожалению много... например, если в Колибри используется драйвер PCNET32, 10 мин пинга и стек подвисает. В Miraculix я исправил этот баг, добавив в нужном месте в icmp.inc освобождение буфера.
И считаю, что его уже достаточно для создания сетевых приложений, например - мессенджера.
А касательно работы стека да... глюков к сожалению много... например, если в Колибри используется драйвер PCNET32, 10 мин пинга и стек подвисает. В Miraculix я исправил этот баг, добавив в нужном месте в icmp.inc освобождение буфера.
Re: socket_process_end
Изменить в socket.inc, для того, чтобы отсчет пошел сначала.
Code: Select all
; в socket_alloc
mov edi, [last_socket_num]
; заменить на
mov edi, 0
Code: Select all
;
; Добавил в stack_init пепехват завершения процесса или потока. Таким же способом будут закрываться файлы и соединения Bluetooth.
;
mov eax, socket_process_end
call [HookTaskKill]
; добавить в socket.inc
; IN : EDX - Closing PID
socket_process_end:
pusha
pushf
cli
.socket_close_PID_start:
mov ebx, net_sockets
.next_socket:
mov ebx, [ebx + SOCKET.NextPtr]
cmp ebx, 0
je .last_socket
cmp [ebx + SOCKET.PID],edx
je .close_socket_handle_of_PID
cmp [ebx + SOCKET.TID],edx
je .close_socket_handle_of_PID
jmp .next_socket
.close_socket_handle_of_PID:
pusha
mov ecx,[ebx + SOCKET.Number]
call socket_close
popa
jmp .socket_close_PID_start
.last_socket:
popf
popa
ret
Who is online
Users browsing this forum: No registered users and 1 guest