В процессе портирования сетевой подсистемы в Miraculix OS, возникло пару вопросов.
Почему не используется процедура закрытия сокетов, при завершении процесса - socket_process_end?
Кроме того, обратил внимание, что поиск номера свободного сокета в socket_alloc, идет не с начала, а начиная с последнего.
socket_process_end
Кста почему исходики ОС закрыты? А ещё я не пойму какая лицензия у проекта.
Изобретайте колёса каждый раз, когда хотите написать новую программу.
Буду открывать по мере готовности. На данный момент открыл исходники новых программ на С (ipconfig, ping, taskmgr, wget, http-server), mx32.asm (ring3 API), и исходный код ядра kernel.asm
Выложил на свой сайт и на github
На счет лицензии еще подумаю.
Выложил на свой сайт и на github
На счет лицензии еще подумаю.
Касательно сетевого стека сказать не могу. Он не полностью реализован. Да и работает тоже не очень. Вы не думали портировать lwIP к себе?
Изобретайте колёса каждый раз, когда хотите написать новую программу.
Я подумал проще портировать стек из KolibriOS, т.к тоже на FASM'e. На счет lwIP надо подумать.. В принципе, его можно дорабатывть по мере необходимости. Критичный для меня функционал я уже доработал.
И считаю, что его уже достаточно для создания сетевых приложений, например - мессенджера.
А касательно работы стека да... глюков к сожалению много... например, если в Колибри используется драйвер PCNET32, 10 мин пинга и стек подвисает. В Miraculix я исправил этот баг, добавив в нужном месте в icmp.inc освобождение буфера.
И считаю, что его уже достаточно для создания сетевых приложений, например - мессенджера.
А касательно работы стека да... глюков к сожалению много... например, если в Колибри используется драйвер PCNET32, 10 мин пинга и стек подвисает. В Miraculix я исправил этот баг, добавив в нужном месте в icmp.inc освобождение буфера.
А вы можете кинуть нам патч пожалуйста)
Изобретайте колёса каждый раз, когда хотите написать новую программу.
Офигеть, кто вернулся! Миракуликс жив, нифига себе!! Спустя столько лет
The best way to predict the future is to create it.
Изменить в 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
И что? И всё?
Из хаоса в космос
The function was disabled because it resulted in deadlock under certain circumstances and whole design should be re-evaluated.
It could be that the proposed solution reduces the frequency, but I don't understand how it can resolve the issue completely.
It could be that the proposed solution reduces the frequency, but I don't understand how it can resolve the issue completely.
"Any intelligent fool can make things bigger, more complex, and more violent. It takes a touch of genius -- and a lot of courage -- to move in the opposite direction." Albert Einstein
Who is online
Users browsing this forum: No registered users and 2 guests